如何使用基于索引的唯一生成的字符串在循环中将新项目添加到字典中? (Python)

How to add new item to dictionary in loop using uniquely generated string based on index? (Python)

我有数组 x[],它可以是任意长度。对于上下文,数组中的每个项目都是一个交易 ID。

我 运行 循环将每个交易 ID 传递到 SOQL 查询以捕获每个交易的信息并将其存储在带有其数组索引的唯一变量中(即对于索引 x[0] 处的交易唯一的变量名称是 string0)。然后我创建一个空字典 LDdates = {}。此过程按预期工作。

但是,当我尝试向字典 LDdates 添加新项目时,键作为交易 OrderedDict 的值(在第 2 行中捕获),值作为交易 OrderedDict 的值,我得到以下错误:"TypeError: string indices must be integers, not str"

我的代码:

    for i in range(len(x)):
        globals()['string%s' % i] = sf.deal__c.get('%s' % x[i])
        LDdates = {}
        LDdates['%s' % ('string%s'['Id'] % i)] = '%s' % ('string%s'['due_date__c'] % i) 

我的问题是:为什么我会看到这个错误?我需要更改什么才能使其正常工作?第 1-3 行按预期工作。第 4 行显示 TypeError。

您当前的问题是:

LDates['%s' % ('string%s'['Id'] % i)]

我相信你的意思是访问你之前创建的变量。那将需要您使用:

LDates[(globals()['string%s' % i])['Id']]

但这整件事是不明智的。为什么不创建一个变量,您只需传入整数 i 即可访问所有数据?那将是 list!

Deals = [ sf.deal__c.get(id) for id in x ]

然后设置LDatesId映射到due_date__c:

LDates = {d['Id']:d['due_date__c'] for d in Deals}