首页 > 解决方案 > TypeError: unhashable type: 'list' 同时改变字典值

问题描述

我需要将 d1 字典中的 'cmd' 键替换为d2['cmd'].

d1 = {'db1': [{'url': 'http://localhost:8080/api', 'cmd': 'test\\nshow databases ', 'request': 'POST'}], 'db2': [{'url': 'http://localhost:8080/api', 'cmd': 'test\\nshow databases ', 'request': 'POST'}]}

d2 = {'cmd': 'test'}
{k: d2.get(v, v) for k, v in d1.items()}

我的代码抛出了这个错误:

TypeError: unhashable type: 'list' 同时更改字典值。

标签: pythonlistdictionary

解决方案


你需要一个嵌套的字典理解。或者,在这种情况下,可以将字典理解进一步解包到字典中。根据PEP 448,您可以使用下面显示的语法合并字典,其中后面的值将始终覆盖前面的值:

{k1:{**v1[0], **d2} for k1,v1 in d1.items()}

{'db1': {'cmd': 'test', 'request': 'POST', 'url': 'http://localhost:8080/api'},
 'db2': {'cmd': 'test', 'request': 'POST', 'url': 'http://localhost:8080/api'}}

推荐阅读