python - 遍历多个 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()
解决方案
这里:
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
推荐阅读
- c# - .Net Core 托管服务需要 HttpContext
- r - R中x轴的描述
- javascript - 从表数据中获取 Javascript 对象数组
- react-native - 是否可以在反应本机路由器通量中创建抽屉菜单?
- asp.net - ResolveUrl 在文件夹中找不到 web 服务
- java - 如何通过 Swagger 将 Java POJO 转换为 JSON 模型和示例,就像它在 swagger-ui 中显示的那样
- r - 在 R 中删除数据框中的行后,如何更新 View() 中的行号?
- mysql - 无法将 None 插入 mysql int 字段
- javascript - 如何覆盖默认浏览器撤消操作
- c# - Appium Chrome 浏览器。如何禁用缓存重置选项