用python将JSON文件中的两个值存储在新字典中

2024-03-29 12:52:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在新的dict中存储JSON文件中的两个值:{[1,2,5]:[0], [1,2,4]:[2]}

我的JSON文件如下所示:

{
    "index": [
        {
            "timestamp": "2018-04-17 17:56:25",
            "src": "src",
            "dst": [1,2,5],
            "value": [0],
            "datatype": "datatype"
        },
        {
            "timestamp": "2018-04-17 18:00:43",
            "src": "src",
            "dst": [1,2,4],
            "value": [2],
            "datatype": "datatype"
        }
   ]
}

我写了这个代码:

with open(filename) as feedjson:
    json_data = json.load(feedjson)
    feedjson.close()

list_dev = {}
for i in json_data["index"]:
    key = i['value']
    value = i['dst']
    list_dev[key] = value
print(list_dev)

我得到这个错误:

list_dev.update({key: value})
TypeError: unhashable type: 'list'

有人能帮我解决这个问题吗?你知道吗


Tags: 文件keydevsrcjsondataindexvalue
2条回答

valuelist->;[1][2]或其他什么,list是可变对象,所以不能对它进行散列

您可以使用列表中的元素 key=i['value'][0] 或者将列表转换为元组 key=tuple(i['value']) 这两个对象都是不可变的,因此可以散列并用作键

顺便说一句,with提供上下文管理器,这样您就不需要使用feedjson.close()关闭文件,with会帮您完成

这只是为了理解:

字典键应该是不可变的。在这个问题中,[1,2,5]是一个列表,它是可变的(可以使用append、pop、push等方法修改内容)数据类型。因此,将列表的全部内容用作字典键(非常罕见)的唯一方法是将其转换为不可变的数据类型,如tuplestring

new_dict = {}              #initialize empty dictionary

dst = t['index'][0]['dst']      #[1,2,5]
value = t['index'][0]['value']  #[0]

new_dict[tuple(dst)] = value  #new_dict key "dst" as tuple

print(new_dict)     
 ->{(1, 2, 5): [0]}

new_dict[str(dst)] = value  #new_dict key "dst" as string

print(new_dict)      
  >{'[1, 2, 5]': [0]}

相关问题 更多 >