不可分类型:'dict'类型错误 [英] unhashable type: 'dict' Type Error

查看:187
本文介绍了不可分类型:'dict'类型错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有这个字典:

  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'}}
/ pre>

我想过滤掉重复的值,所以最终我会得到

  {1:{'title':u'testing123','description':u'testing456'},6:{'title':u'something','description'我写了这段代码:







$ $ $ $

为key,value.items()中的值:
如果没有设置(value.values())。issubset(set(dic.values()))
dic [key] = value
/ pre>

但是,我收到错误消息 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆