比较两个字典与列表类型值

2024-04-25 23:42:18 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 模块方法列表itemsgreenbluereddict
2条回答
shared_keyvals = dict( (key, dict1[key])
                       for key in (set(dict1) & set(dict2))
                       if dict1[key] == dict2[key]
                     )

你甚至可以把它变成一个函数:

^{pr2}$

显然,如果您不希望输出是字典形式的,那么您只需删除dict()调用并替换为列表理解括号([])。在

列表是可变的,因此不可散列。集合只能由散列项生成。因为上面两个dict中的值都是列表,所以不能用它们来构建集合。但是,如果要将值的类型从列表更改为元组(它们是不可变的),就可以构建集合并执行集合操作。在

>>> 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))]

相关问题 更多 >