首页 > 解决方案 > 遍历多个 Json 文件并将其添加到字典中

问题描述

所以我的问题是这个。我将这些 JSON 文件存储在一个名为json_list

['9.json',
 '8.json',
 '7.json',
 '6.json',
 '5.json',
 '4.json',
 '3.json',
 '2.json',
 '10.json',
 '1.json',]

这些文件中的每一个都包含一个带有(ID NUMBER:评级)的字典。

这是我下面的代码。这个想法是将这些文件的所有键和值存储到字典中,以便更容易搜索。我已经分离了键和值,因此添加到字典中会更容易。问题是这个迭代只通过文件'1.json'然后停止。我不知道为什么它没有通过所有 10。

for i in range(len(json_list)):
    f = open(os.path.join("data", json_list[i]), encoding = 'utf-8')
    file = f.read()
    f.close()
    data = json.loads(file)
    keys = data.keys()
    values = data.values()

标签: pythonjsondictionary

解决方案


这里:

data = json.loads(file)
keys = data.keys()
values = data.values()

您正在重置键和值的值,而不是附加到它。

也许尝试附加它们,例如(字典键在每个文件中必须是唯一的,否则您将覆盖数据):

data = json.loads(file)
keys += list(data.keys())
values += list(data.values())

或者更好的是只附加字典(字典键在每个文件中必须是唯一的,否则您将覆盖数据):

all_data = {}
for i in range(len(json_list)):
    f = open(os.path.join("data", json_list[i]), encoding = 'utf-8')
    file = f.read()
    f.close()
    data = json.loads(file)
    all_data = {**all_data, **data}

工作示例:

import json
ds = ['{"1":"a","2":"b","3":"c"}','{"aa":"11","bb":"22","cc":"33", "dd":"44"}','{"foo":"bar","eggs":"spam","xxx":"yyy"}']
all_data = {}
for d in ds:
    data = json.loads(d)
    all_data = {**all_data, **data}

print (all_data)

输出:

{'1': 'a', '2': 'b', '3': 'c', 'aa': '11', 'bb': '22', 'cc': '33', 'dd': '44', 'foo': 'bar', 'eggs': 'spam', 'xxx': 'yyy'}

如果键不是唯一的,请尝试将字典附加到字典列表中,如下所示:

import json
ds = ['{"1":"a","2":"b","3":"c"}','{"aa":"11","bb":"22","cc":"33", "dd":"44"}','{"dd":"bar","eggs":"spam","xxx":"yyy"}']
all_dicts= []
for d in ds:
    data = json.loads(d)
    all_dicts.append(data)

print (all_dicts)
# to access key
print (all_dicts[0]["1"])

输出:

[{'1': 'a', '2': 'b', '3': 'c'}, {'aa': '11', 'bb': '22', 'cc': '33', 'dd': '44'}, {'dd': 'bar', 'eggs': 'spam', 'xxx': 'yyy'}]
a

推荐阅读