比较两个词典时键入错误

Mal*_*tha 5 python

我有两个词典

x = {0:[1,2,3], 1:[1,2,3], 2:[1,2,3]}
y = {0:[1,2,3], 1:[1,2,3], 2:[1,2,3]}
Run Code Online (Sandbox Code Playgroud)

我需要检查这两个词典的相似性.我正在使用以下代码

shared_items = set(x.items()) & set(y.items())
Run Code Online (Sandbox Code Playgroud)

但它给了我

TypeError: unhashable type: 'list' 错误.

这个问题的原因是什么以及如何纠正它.

Oli*_*çon 5

A set不能包含不可清除的对象,因为它使用哈希进行项查找.由于您具有list可变的值,因此添加这些值set会引发错误.

您将需要使用tuple值.

x = {1: (1, 2, 3), 2: (1, 2, 3)}
y = {0: (1, 2, 3), 1: (1, 2, 3)}

shared_items = set(x.items()) & set(y.items())
# shared_items: {(1, (1, 2, 3))}
Run Code Online (Sandbox Code Playgroud)

虽然,由于dict允许a 中的值是可变的,因此您可能希望找到另一种数据结构以获得更通用的解决方案.以下将返回dict共享键值对.

x = {1: [1, 2, 3], 2: [1, 2, 3]}
y = {0: [1, 2, 3], 1: [1, 2, 3]}

shared_items = {k: x[k] for k in x if k in y and x[k] == y[k]}
# shared_items: {1: [1, 2, 3]}
Run Code Online (Sandbox Code Playgroud)


hsp*_*her 2

不幸的是,它在 中不起作用Python3x,因为列表被认为是不可散列的。直接比较它们怎么样,这应该适用于大多数情况。

x == y
Run Code Online (Sandbox Code Playgroud)