你好,我有两个带有 id 的列表
[(u'0', 1), (u'3000', 2), (u'10000', 3), (u'20000', 4)]
[(u'2999', 1), (u'9999', 2), (u'19999', 3), (u'999999999', 4)]
两个列表的 ID 始终为 1, 2, 3, 4 我怎样才能合并列表以得到这样的东西:
[('0', '2999', 1), ('3000', '9999', 2), etc...]
有简单的方法吗?
我的意思是使用 zip 我会得到:
[((u'0', 1), (u'2999', 1)), ((u'3000', 2), (u'9999', 2)), ((u'10000', 3), (u'19999', 3)), ((u'20000', 4), (u'999999999', 4))]
但这不是我想要的。 我仍然想要上面的内容,但我真的不知道该怎么做。
最佳答案
如果您想在同一位置连接元素,您可以这样做:
[(a,b,key) for (a,key),(b,_) in zip(first_list, second_list)]
用法:
>>> A = [(u'0', 1), (u'3000', 2), (u'10000', 3), (u'20000', 4)]
>>> B = [(u'2999', 1), (u'9999', 2), (u'19999', 3), (u'999999999', 4)]
>>> [(a,b,key) for (a,key),(b,_) in zip(A,B)]
[(u'0', u'2999', 1), (u'3000', u'9999', 2), (u'10000', u'19999', 3), (u'20000', u'999999999', 4)]
如果具有相同“id”的元素可能不在同一位置,您可以使用 key=lambda x:x[1]
对它们进行排序,然后使用上面的列表理解。
或者,您可以使用 defaultdict(list)
,如 Ashwini 的答案。
关于Python与元素list(value, id)合并到元素: list(value, value2, id),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17062089/