簡體   English   中英

比較元組和列表的字典

[英]Comparing dictionaries of tuples and lists

我找到了多篇關於這個主題的帖子(這個也是),但這些選項都不適用於我的字典。 我想比較我的字典並知道相同的值的數量以及每個字典唯一的鍵值對。

我正在使用兩個字典,其中元組作為鍵,列表作為值(第二個值是另一個列表),如下所示:

Dict1:{(10, 11): ['C', ['T']],
       (20, 21): ['C', ['T']],
       (34, 35): ['G', ['A']],
       (68, 69): ['A', ['T','G']]}


Dict2:{(10, 11): ['C', ['T']],
       (20, 21): ['C', ['A']],
       (40, 41): ['T', ['G']],
       (68, 69): ['A', ['T','G']]}

我想比較那些字典並有不同的 output。 使用我的示例,這就是我想要的變量:

  • 2個值相同並且存在於兩個字典中
  • 2 個值僅在 dict1 中
  • 2 個值僅在 dict2 中

我正要遍歷 dict1 並每次將每個鍵與所有 dict2 進行比較(並且每次滿足條件時我都會更新變量),但我知道這可能不是最有效的方法。

有人有更快的想法嗎?

謝謝

您可以首先使用set-like methods of dict.keys() objects過濾掉鍵,然后繼續獲取對:

>>> same_keys = Dict1.keys() & Dict2.keys()
>>> dict1_unq_keys = Dict1.keys() - Dict2.keys()
>>> dict2_unq_keys = Dict2.keys() - Dict1.keys()
>>> same_pairs = [(key, Dict1[key]) for key in same_keys if Dict1[key] == Dict2[key]]
>>> Dict1_unq_pair = [(key, Dict1[key]) for key in dict1_unq_keys]
>>> Dict2_unq_pair = [(key, Dict2[key]) for key in dict2_unq_keys]

>>> same_pairs
[((68, 69), ['A', ['T', 'G']]), ((10, 11), ['C', ['T']])]

>>> Dict1_unq_pair
[((34, 35), ['G', ['A']])]

>>> Dict2_unq_pair
[((40, 41), ['T', ['G']])]

筆記:

如果您可以將tuples用作dict值而不是lists ,則可以通過直接使用dict.items()設置操作來獲得相同的對來更輕松地完成此操作。

例如,如果Dict1Dict2具有以下形式:

>>> Dict1
{(10, 11): ('C', ('T',)),
 (20, 21): ('C', ('T',)),
 (34, 35): ('G', ('A',)),
 (68, 69): ('A', ('T', 'G'))}

>>> Dict2
{(10, 11): ('C', ('T',)),
 (20, 21): ('C', ('A',)),
 (40, 41): ('T', ('G',)),
 (68, 69): ('A', ('T', 'G'))}

# Then you could simple do:
>>> same_pairs = list(Dict1.items() & Dict2.items())

>>> same_pairs
[((68, 69), ('A', ('T', 'G'))), ((10, 11), ('C', ('T',)))]

暫無
暫無

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

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