TypeError:不可散列的类型:更改字典值时的“列表”

时间:2019-07-12 13:07:14

标签: python list dictionary

我需要用d2['cmd']替换d1词典中的'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:不可散列的类型:“ list”,同时更改字典值。

2 个答案:

答案 0 :(得分:1)

您需要在此处理解嵌套词典。或在这种情况下的另一种选择,是将词典理解与进一步分解成词典。根据{{​​3}},您可以使用以下所示的语法合并字典,其中后面的值将始终覆盖前面的值:

{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'}}

答案 1 :(得分:0)

如果我正确理解了您的问题,您可以这样做,这很容易阅读。

for k, v in d1.items():
    v[0].update(d2)