首页 > 解决方案 > 尝试迭代和比较列表和字典中的值时出现类型错误

问题描述

我正在尝试遍历一个列表,该列表是一个 json 的导入和一个我想将列表的值存储在值位置的字典。问题是,当我遍历列表并执行比较 if 语句时,我收到此错误消息

if i["service"] == serviceIp[i]:
TypeError: unhashable type: 'dict'

我想存储服务地址的字典

serviceIp = {
    "service-A": "",
    "service-B": ""
}

从 json 导入的列表,包括所有地址

服务地址

[{'service': 'service-A', 'address': ['localhost1']}, {'service': 'service-B', 'address': ['localhost2']}] 

这是我的循环和 if 语句

for i in serviceAddress:
        if i["service"] == serviceIp[i]:
            

知道是什么导致了这个错误吗?我的目标是比较服务的键并将服务值存储到字典的值中

标签: python

解决方案


ifor 循环中的值是一个字典。例如:{'service': 'service-A', 'address': ['localhost1']}并且不能用作 dict 的键。

如果要在 dict 中存储服务名称的地址,可以这样做:

for s in serviceAddress:
    serviceIp[s["service"]] = s["address"]

或者,如果您不想确保只添加其名称已经在serviceIp字典中的服务:

for s in serviceAddress:
    if s["service"] in serviceIp:
       serviceIp[s["service"]] = s["address"]

推荐阅读