Python在复杂di上迭代

2024-04-18 23:41:22 发布

您现在位置: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.] 

我做错了什么?你知道吗


Tags: 代码infor字典linkupdateparamslinks
2条回答

您希望输出一个dict列表吗?如果是的话

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]

所以,看起来您在内部for循环之外声明了一个字典。你知道吗

link = {}

您正在使用每个内部for循环运行对其进行变异。你知道吗

link.update({ "selementid1": nodea, "selementid2": i, })

此外,您将它附加到link_params的次数与内部for循环运行的次数相同。你知道吗

link_params.append(link)

你真的需要这样的东西:

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

相关问题 更多 >