迭代dict中dict键内的值

时间:2016-01-11 00:31:59

标签: python dictionary iterator

我有以下代码:

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'。

任何帮助都会很棒。

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
>>>