簡體   English   中英

合並 python 中的兩個元組列表

[英]merging two lists of tuples in python

假設這些是我的清單:

oracle_files = [
    (1, "__init__.py"),
    (2, "price_calc.py"),
    (3, "lang.py")]
predicted_files = [
    (5, ["random.py","price_calc.py"]),
    (2, ["__init__.py","price_calc.py"]),
    (1, ["lang.py","__init__.py"])]

第一個列表是一個元組列表,其中我每個都有一個標識符和一個字符串。 第二個是整數元組列表和字符串列表

我的意圖是創建第三個列表,通過 ID(整數)與這兩個列表相交

output 應該如下所示:

result = [(2, "price_calc.py", ["__init__.py","price_calc.py"]), 
          (1, "__init__.py", ["lang.py","__init__.py"])]

你知道到達這個 output 的方法嗎? 因為我沒有做對。

這是使用dict的方法:

oracle_files = [(1, "__init__.py"), (2, "price_calc.py"), (3, "lang.py")]
predicted_files = [(5, ["random.py","price_calc.py"]), (2, ["__init__.py","price_calc.py"]), (1, ["lang.py","__init__.py"])]

dct1 = dict(oracle_files)
dct2 = dict(predicted_files)

result = [(k, dct1[k], dct2[k]) for k in dct1.keys() & dct2.keys()]
print(result) # [(1, '__init__.py', ['lang.py', '__init__.py']), (2, 'price_calc.py', ['__init__.py', 'price_calc.py'])]

這使用了一個方便的事實,即從dict.keys()獲得的 dict 鍵表現得像一個集合。

鍵視圖類似於集合,因為它們的條目是唯一且可散列的。 [...] 對於類似集合的視圖,為抽象基礎 class collections.abc.Set 定義的所有操作都可用(例如==<^ )。

https://docs.python.org/3/library/stdtypes.html#dictionary-view-objects

我認為這可以滿足您的要求。

oracle_files = [(1, "__init__.py"), (2, "price_calc.py"), (3, "lang.py")]
predicted_files = [(5, ["random.py","price_calc.py"]), (2, ["__init__.py","price_calc.py"]), (1, ["lang.py","__init__.py"])]

dct = dict(oracle_files)
for k,v in predicted_files:
    if k in dct:
        dct[k] = (dct[k], v)
print(dct)

outlist = [(k,)+v for k,v in dct.items() if isinstance(v,tuple)]
print(outlist)

Output:

{1: ('__init__.py', ['lang.py', '__init__.py']), 2: ('price_calc.py', ['__init__.py', 'price_calc.py']), 3: 'lang.py'}
[(1, '__init__.py', ['lang.py', '__init__.py']), (2, 'price_calc.py', ['__init__.py', 'price_calc.py'])]

暫無
暫無

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

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