Python迭代复杂的字典

时间:2014-05-20 05:45:50

标签: python

我在复杂dict上进行正确迭代时遇到了一些问题。 字典是:

links = {1: (2, 3, 4, 5, 6, 7, 8, 9, 10)} 

迭代代码是:

link_params = []

for nodea, nodeb in links.iteritems():
    link = {}
    for i in nodeb:
        link.update({
            "selementid1": nodea,
            "selementid2": i,
        })
        link_params.append(link)

我明白了:

[{'selementid1': 1, 'selementid2': 10},
 {'selementid1': 1, 'selementid2': 10},
 {'selementid1': 1, 'selementid2': 10},
 {'selementid1': 1, 'selementid2': 10},
 {'selementid1': 1, 'selementid2': 10},
 {'selementid1': 1, 'selementid2': 10},
 {'selementid1': 1, 'selementid2': 10},
 {'selementid1': 1, 'selementid2': 10},
 {'selementid1': 1, 'selementid2': 10}]

但我想得到:

[{'selementid1': 1, 'selementid2': 2},
 {'selementid1': 1, 'selementid2': 3},
 {'selementid1': 1, 'selementid2': 4}, etc.] 

我做错了什么?

2 个答案:

答案 0 :(得分:0)

你期待一个dicts列表作为输出吗?如果是的话

links = {1: (2, 3, 4, 5, 6, 7, 8, 9, 10)} 
link_params = []
for nodea, nodeb in links.iteritems():
  for i in nodeb:
      link_params.append({
           "selementid1": nodea,
           "selementid2": i,
           })
print link_params  #[{'selementid1': 1, 'selementid2': 2}, {'selementid1': 1, 'selementid2': 3},....

使用列表理解

links = {1: (2, 3, 4, 5, 6, 7, 8, 9, 10)} 
link_params = [{"selementid1": nodea,"selementid2": i} for nodea, nodeb in links.iteritems() for i in nodeb]

答案 1 :(得分:0)

所以,看起来你已经在你的内部循环之外声明了一个字典。

  

link = {}

你正在用每个内部循环运行来改变它。

  

link.update({                  “selementid1”:nodea,                  “selementid2”:我,                  })

此外,您将内部for循环运行的次数追加到link_params。

  

link_params.append(链接)

你实际上需要这样的东西:

  

links = {1:(2,3,4,5,6,7,8,9,10)}

     

link_params = []

     

表示nodea,nodeb表示links.iteritems():

  for i in nodeb:

       link_params.append({"selementid1": nodea,
           "selementid2": i}) 
     

print link_params