我在复杂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.]
我做错了什么?
答案 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