簡體   English   中英

通過鍵合並兩個元組列表

[英]Combine two lists of tuples by key

我有兩個元素元組的兩個列表。 元組的第一個元素是ID,第二個是某種值。 值的類型取決於列表。

lst1 = [ ('a', 1), ('b', 2), ('c', 3) ]
lst2 = [ ('b', 5), ('a', 4), ('c', 6) ] 

將它們組合為最簡單的方法是:

lst3 = [ ('a', 1, 4), ('b', 2, 5), ('c', 3, 6)]

我建議您首先將這些元組列表轉換成字典。 然后,假設兩個列表都包含相同的“鍵”,則可以使用簡單的列表推導從兩個字典中獲取相應的值。

lst1 = [ ('a', 1), ('b', 2), ('c', 3) ]
lst2 = [ ('b', 5), ('a', 4), ('c', 6) ] 
dict1 = dict(lst1)
dict2 = dict(lst2)
lst3 = [(k, dict1[k], dict2[k]) for k in sorted(dict1)]

請注意,字典沒有固定的順序。 如果要保留鍵在lst1中的lst1 ,也可以使用它,如注釋中所建議:

lst3 = [(k, v, dict2[k]) for k, v in lst1]
lst1 = [ ('a', 1), ('b', 2), ('c', 3) ]
lst2 = [ ('b', 5), ('a', 4), ('c', 6) ] 

dst1 = dict(lst1)
dst2 = dict(lst2)

for i in dst1:
    if i in dst2:
        dst1[i] = (dst1[i],dst2[i])

print dst1
{'a': (1, 4), 'c': (3, 6), 'b': (2, 5)}

然后,您可以將此dst1格式dst1為所需結果的格式。

您只需要使用lst1中每個元組中的第一個元素作為鍵並存儲該元組作為值來創建一個dict,然后遍歷第二個列表並將最后一個元素添加到dict中的相應元組即可。

lst1 = [('a', 1), ('b', 2), ('c', 3)]
lst2 = [('b', 5), ('a', 4), ('c', 6)]
from collections import OrderedDict
d = OrderedDict(zip((tup[0] for tup in lst1), lst1))

for k,v  in lst2:
    d[k] = d[k] + (v,)
print(d.values())
[('a', 1, 4), ('b', 2, 5), ('c', 3, 6)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM