使用Python 2.7。我有一组由id标签组成的数据:
SET1=[{'MISC': u'2759'}, {'MISC': u'2759'}, {'MISC': u'2759'}, {'MISC': u'2758'},{'MISC': u'2758'}, {'MISC': u'1751'}]
和另一组由不同的id标签组成:
SET2= [u'15672542c8ed280b', u'1566b77702f8865f', u'1565c2241aebb314', u'155c6888c507e365', u'155c5b8ded9a7c03', u'155c1173f58f1494']
如您所见,这些集是一对一的,每个MISC标记与SET2中的相应ID相关。例如,SET1中的第一个元素{'MISC': u'2759'}
需要与SET2中的第一个元素相关联:u'15672542c8ed280b'
。
理想情况下,我想构建一个这样的数据结构:
Matched_IDS=[{2759, 15672542c8ed280b}, {2759, 1566b77702f8865f} , {2759, 1565c2241aebb314}, {...}, {...} ]
到目前为止,我尝试过这种方法,但由于我使用了两个for循环,我对数据进行了两次迭代,得到了一个非常难看的集合:
MSGMatch=[]
for a in SET1:
for b in SET2:
MSGMatch.append({str(a),str(b)})
print(MSGMatch)
任何人都有一个更优雅,更有效的解决方案,他们可以指出我朝着正确的方向前进?
答案 0 :(得分:4)
在一次迭代中,您可以尝试:
[{a['MISC'], b} for a, b in zip(SET1, SET2)]
这将生成您指定的集合列表。
这更清楚地显示了如何在一次迭代中迭代两个列表:
result = []
for i, a in enumerate(SET1):
result.append({a['MISC'], SET2[i]})
答案 1 :(得分:3)
zip([m['MISC'] for m in SET1], SET2)
假设你的“套装”(它们实际上是列表)长度相同,这应该可以给你我想要的东西。