写了两个生成器 agentman,agreement,生成器里面的元素是一个个的 python 字典,每个字典里面都有一个 key 相同,key 对应的 value 也相同,我的需求就是分别遍历两个生成器找出拥有相同 key-value 的字典,然后将这两个字典合并成一个字典。(有没有更好的实现方法,两个 for 循环看起来实在是太丑了)
for i in agreement:
for j in agentman:
if i['agent_name'] == j['agent_name']:
print(dict(i, **j))
结果我发现,当 agreement 取了第一个值的时候,agentman 可以遍历一遍,但是,当 agreement 取第二个值一直到最后一个值的时候,无法进入 agentman 的循环了,j 一直等于 agentman 的最后一个值,感觉就像是 agentman 为空一样,最后的结果就是有且只有第一次的循环得到的一个合并之后的字典。
我本以为是因为生成器只能迭代一次。可当我又写了个小例子的时候,发现可以正常输出我想要的结果。
a = [{'a': 1, 'b': 2, 'c': 3}, {'a': 4, 'b': 5, 'c': 6}, {'a': 7, 'b': 8, 'c': 9}]
b = [{'a': 1, 'd': 14, 'e': 45}, {'a': 4, 'd': 24, 'e': 5}, {'a': 7, 'd': 34, 'e': 55}]
def ag():
for i in a:
yield i
def bg():
for j in b:
yield j
for i in ag():
for j in bg():
if i['a'] == j['a']:
print(dict(i, **j))
结果:
{'a': 1, 'b': 2, 'c': 3, 'd': 14, 'e': 45}
{'a': 4, 'b': 5, 'c': 6, 'd': 24, 'e': 5}
{'a': 7, 'b': 8, 'c': 9, 'd': 34, 'e': 55}
所以我选择就不明白到底是什么问题??
我的描述可以看的明白吧?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.