我有两组数据,我需要构建一个数据结构,将它们组织成集合。 (蟒蛇)

时间:2016-08-10 17:55:15

标签: python set

使用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)

任何人都有一个更优雅,更有效的解决方案,他们可以指出我朝着正确的方向前进?

2 个答案:

答案 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)

假设你的“套装”(它们实际上是列表)长度相同,这应该可以给你我想要的东西。