我有以下代码:
dict_1= {
'key1':{'key1':[.56,.75], 'key2':[]},
'key2':{'key1':[.76,.95], 'key2':[]},
'key3':{'key1':[.96,1.05],'key_2':[]}
}
def zones_calc(ftp):
var_1 = ftp
for i in dict_1.iteritems():
for v in i['key_1']:
i[key_2.append(var_1 * v)]
zones_calc(200)
我一直收到错误:
TypeError: tuple indices must be integers, not str
我是python编码的新手,我将此作为一个使用词典的机会。我已经使用列表和元组工作得很好,它工作正常。我试图利用一个字典来保持我的倍数和结果都在一个字典中。
我要做的显然是将'key_1'中的内容相乘并将其附加到每个dict键中的'key_2'。
任何帮助都会很棒。
答案 0 :(得分:2)
首先,您使用key_1
在字典中查找,并且您的词典中没有key_1
值的任何键,您有多个key1
所以我就是假设这就是你想要的。
其次,您要缩进i[key_2.append(var_1 * v)]
并将其更改为value['key2'].append(var_1 * v)
:我再次假设您希望key2
作为词典的关键,而不是key_2
并且你还想获取值而不是乘以var_1值(不会将某些内容附加到列表的索引,这没有任何意义)。
最后当你在字典上进行迭代时,如果你没有指定两个值,你的迭代上下文变量将成为词典的关键,如果你想要你需要的值,那么:
for key, value in dict_1.iteritems():
,而不是for i in dict_1.iteritems():
。
现在如果我理解了你想要的东西,这可能是一个解决方案:
dict_1= {
'key1':{'key1':[.56,.75], 'key2':[]},
'key2':{'key1':[.76,.95], 'key2':[]},
'key3':{'key1':[.96,1.05],'key2':[]}
}
def zones_calc(ftp):
var_1 = ftp
for key, value in dict_1.iteritems():
for v in value['key1']:
value['key2'].append(var_1 * v)
zones_calc(200)
print dict_1
哪个输出:
$ python example11.py
{'key3': {'key2': [192.0, 210.0], 'key1': [0.96, 1.05]}, 'key2': {'key2': [152.0, 190.0], 'key1': [0.76, 0.95]}, 'key1': {'key2': [112.00000000000001, 150.0], 'key1': [0.56, 0.75]}}
希望这会有所帮助。 请注意,我尝试更改您的代码以便工作,我没有尝试使其更加“pythonic”。
希望这会有所帮助。 :)
答案 1 :(得分:1)
试试这个:
dict_1= {
'key1':{'key1':[.56,.75], 'key2':[]},
'key2':{'key1':[.76,.95], 'key2':[]},
'key3':{'key1':[.96,1.05],'key2':[]}
}
def zones_calc(ftp):
var_1 = ftp
for v1 in dict_1.values():
for v in v1['key1']:
v1['key2'].append(var_1 * v)
zones_calc(200)
结果如下:
{'key3': {'key2': [192.0, 210.0], 'key1': [0.96, 1.05]},
'key2': {'key2': [152.0, 190.0], 'key1': [0.76, 0.95]},
'key1': {'key2': [112.00000000000001, 150.0], 'key1': [0.56, 0.75]}}
最后一行的小数部分是由于浮点舍入:
>>> 0.56 * 200
112.00000000000001
>>>