假设我有这本字典:
items = {1: {'title': u'testing123', 'description': u'testing456'},
2: {'description': u'testing123', 'description': u'testing456'},
3: {'description': u'testing123', 'description': u'testing456'},
4: {'description': u'testing123', 'description': u'testing456'},
5: {'description': u'testing123', 'description': u'testing456'},
6: {'description': u'somethingelse', 'description': u'somethingelse'}}
我想过滤掉重复的值,这样最后我会得到
{1: {'title': u'testing123', 'description': u'testing456'}, 6: {'title': u'something', 'description': u'somethingelse'}}
我写了这段代码:
dic = {}
for key, value in items.items():
if not set(value.values()).issubset(set(dic.values())):
dic[key] = value
但是我得到了错误消息TypeError: unhashable type: 'dict'
。我不知道为什么会发生这种情况,也不知道如何解决。
这是受到another question和我解决它的失败尝试的启发。
dic.values()返回dict的列表
因此,不能对dict应用set,因为dict是不可哈希的。
顺便说一句,你可以通过以下方法来修复它:
对于python>;3.x
您正在尝试创建一组dict,但这是不可能的,因为dict是不可更改的(因为它们是可变的——它们是否相等可以在修改/添加/删除dict中的对时更改)。
也许不使用dict,您可以将它们的值的元组用于您的集合、la
if not set((v['description_a'], v['description_b]) for v in value.values()).issubset((v['description_a'], v['description_b]) for v in set(dic.values())):
或类似的集合?编辑:如果必须使用集合,正如其他人指出的那样,必须使用像元组这样的散列对象:
为
unique_items
提供:如果
items
不是很大(或者,至少如果输出字典不是很大的话):(假设字典示例中的第一个键应该是
title
)。但如果items
中确实存在重复项,则无法预测此词典的键是什么。相关问题 更多 >
编程相关推荐