python - 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' 同时更改字典值。
解决方案
你需要一个嵌套的字典理解。或者,在这种情况下,可以将字典理解进一步解包到字典中。根据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'}}
推荐阅读
- java - java中的所有类如何都可以使用一个对象?
- javascript - 替换所有标签和空格
- ios - iOS14全屏视频通话界面
- postgresql - 指数超出范围。插入 EF Core 后
- airflow - 气流 - 如何运行 dags 等待过去的成功
- sql - 如何在并非所有插槽号都被阻止的情况下返回被阻止的插槽(即小组成员未死)
- arrays - 在 SwiftUI 中初始化可变结构
- angularjs - 菜单:必须有一个“内容”元素来监听拖动事件
- python - 有没有办法根据 url 加载烧瓶路线
- assembly - MIPS 寄存器不会将 0XFA9C 值分配给 $a0 寄存器