簡體   English   中英

將兩個詞典與列表類型值進行比較

[英]comparing two dictionaries with list type values

我想比較兩個詞典。 我的方法是將它們變成兩個單獨的元組列表,然后使用set模塊。 這是一個例子:

dict = {'red':[1,2,3],'blue':[2,3,4],'green':[3,4,5]}

dict1 = {'green':[3,4,5],'yellow':[2,3,4],'red':[5,2,6]}

intersection = set(set(dict.items()) & set(dict1.items()))

顯然,這是比較兩個元組列表和python不喜歡那樣。 我得到一個TypeError:'list'是不可用的錯誤(或類似的措辭)。

我希望交集包含[('green',[3,4,5])] 有任何想法嗎?

shared_keyvals = dict( (key, dict1[key])
                       for key in (set(dict1) & set(dict2))
                       if dict1[key] == dict2[key]
                     )

你甚至可以把它變成一個函數:

def shared_keyvals(dict1, dict2):
    return dict( (key, dict1[key])
                 for key in (set(dict1) & set(dict2))
                 if dict1[key] == dict2[key]
               )

顯然,如果您不希望以字典形式輸出,則可以刪除dict()調用並替換為list comprehension bracket( [] )。

列表是可變的,因此不可清除。 一組只能用可打印的物品建造。 由於上面兩個dicts中的值是列表,因此無法構建集合。 但是,如果要將值的類型從列表更改為元組(這是不可變的),則可以構建集合並執行集合操作。

>>> dict1 = {'blue': (2, 3, 4), 'green': (3, 4, 5), 'red': (1, 2, 3)}
>>> dict2 = {'green': (3, 4, 5), 'yellow': (2, 3, 4), 'red': (5, 2, 6)}
>>> list(set(dict1.items()) & set(dict2.items()))
[('green', (3, 4, 5))]

暫無
暫無

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

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