在字典中迭代并添加多个Json文件

2024-04-19 02:54:31 发布

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

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

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

每个文件都包含一个带有(ID号:Rating)的字典

下面是我的代码。其想法是将这些文件的所有键和值存储到一个字典中,以便更容易搜索。我已将键和值分隔开,以便更容易添加到字典中。问题是,此迭代只经过文件“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()

Tags: 文件代码inidjson列表fordata
1条回答
网友
1楼 · 发布于 2024-04-19 02:54:31

在这里:

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

相关问题 更多 >