不可分类型:'dict'类型错误 [英] unhashable type: 'dict' Type Error
本文介绍了不可分类型:'dict'类型错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我有这个字典:
items = {1:{'title':u'testing123','description ':u'testing456'},
/ pre>
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'我写了这段代码:
/ pre>
$ $ $ $
为key,value.items()中的值:
如果没有设置(value.values())。issubset(set(dic.values()))
dic [key] = value
但是,我收到错误消息
TypeError:unhashable type:'dict'
。我不知道为什么会发生这种情况,以及如何解决这个问题。
这是灵感来自于另一个问题和我尝试解决的失败。
解决方案dic.values()返回列表
>>>对于键,在items.items()中的值:
... print dic.values()
...
[{'description':u'testing456','title': u'testing123'}]
[{'description':u'testing456','title':u'testing123'}]
[{'description':u'testing456','title' u'testing123'}]
[{'description':u'testing456','title':u'testing123'}]
[{'description':u'testing456','title' u'testing123'}]
[{'description':u'testing456','title':u'testing123'}]
>>>
所以,您不能将dict设置为dict,因为dict不可哈希。
您可以通过以下方式修复:
>>> dic = {}
>>>>对于key.items()中的键值:
...如果没有设置(value.values())。issubset(set(sum([x.values()for x in dic.values()] ,[]))):
... dic [key] = value
...
>>> dic
{1:{'description':u'testing456','title':u'testing123'},6:{'description':u'somethingelse','title':u'somethingelse'}}
>>>
对于python> 3.x
如果没有设置(value.values())。issubset(set(sum([list(x.values())for x in list(dic.values())],[] ))):
Suppose I have this dictionary:
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'}}
I want to filter out the duplicate values, so that in the end I'd get
{1: {'title': u'testing123', 'description': u'testing456'}, 6: {'title': u'something', 'description': u'somethingelse'}}
I wrote this code:
dic = {} for key, value in items.items(): if not set(value.values()).issubset(set(dic.values())): dic[key] = value
however I get the error message
TypeError: unhashable type: 'dict'
. I am not sure why this happens and how to fix it.This is inspired by another question and my failed attempt to solve it.
解决方案dic.values() return list of dict
>>> for key, value in items.items(): ... print dic.values() ... [{'description': u'testing456', 'title': u'testing123'}] [{'description': u'testing456', 'title': u'testing123'}] [{'description': u'testing456', 'title': u'testing123'}] [{'description': u'testing456', 'title': u'testing123'}] [{'description': u'testing456', 'title': u'testing123'}] [{'description': u'testing456', 'title': u'testing123'}] >>>
So, you can't apply set on dict as dict is not hashable.
Btw you can fix it by:
>>> dic = {} >>> for key, value in items.items(): ... if not set(value.values()).issubset(set(sum([x.values() for x in dic.values()],[]))): ... dic[key] = value ... >>> dic {1: {'description': u'testing456', 'title': u'testing123'}, 6: {'description': u'somethingelse', 'title': u'somethingelse'}} >>>
For python > 3.x
if not set(value.values()).issubset(set(sum([list(x.values()) for x in list(dic.values())],[]))):
这篇关于不可分类型:'dict'类型错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文