我想比较两本字典。我的方法是将它们转换成两个单独的元组列表,然后使用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]
               )

显然,如果您不希望输出为dictionary形式,您可以删除dict()调用并替换为列表理解括号([])。

关于python - 比较两个字典与列表类型的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5062166/

10-09 20:14
查看更多