在解析字典列表、通过循环访问每个字典的所有键值对以便一次处理每个k-v时遇到困难。
我有一个由字典列表组成的json文件。简而言之:
[
{"": "0", "a": "3893", "b": "2389", "c": "1209"},
{"": "1", "a": "4308", "b": "4560", "c": "9127"},
...
]
我想在每个字典中循环这个,并且对于每个键-值对(不包括第一个键,假设它将被跳过,因为键是空的),可以访问一个dict的a,b,c,k-v对,以便单独处理它们。
我试过了:
import json
with open("file.json", "r") as read_file:
data = json.load(read_file)
result_list = []
for d in data:
result_list.append([v for k,v in d.items()])
for k, v in enumerate(result_list.items()):
# process each key-value pair
但我得到以下错误:
Traceback (most recent call last):
File "somescript.py", line 28, in <module>
for k, v in enumerate(result_list.items()):
AttributeError: 'list' object has no attribute 'items'
与此同时,我试着:
import json
with open("file.json", "r") as read_file:
data = json.load(read_file)
for i in data:
print(i, data[i])
并获取:
Traceback (most recent call last):
File "somescript.py", line 26, in <module>
print(i, dat[i])
TypeError: list indices must be integers or slices, not dict
代码是错误的,我还不知道如何实现上面的,它可能很简单,但我还没有找到它。
发布于 2019-06-27 07:21:59
result_list = []
for d in data:
result_list.append([v for k,v in d.items()])
这将创建一个列表列表。请注意,当您这样做时,您正在丢弃字典中的关键字。这可能不是您想要的。
for k, v in enumerate(result_list.items()):
# process each key-value pair
这里会出现一个错误,因为result_list
是一个列表,而不是一个字典。列表没有名为items()
的方法。
我建议您直接在data
上迭代。不需要result_list
for d in data:
for k, v in d.items():
# process each key-value pair
发布于 2019-06-27 07:11:41
问题的第一部分存在于枚举调用中:
for k, v in enumerate(result_list): # take off the .items())
# process each key-value pair
您不会在result_list上调用.items();enumerate会将其作为列表使用。
回答你的第二个问题:
import json
with open("file.json", "r") as read_file:
data = json.load(read_file)
for i in data:
print(i, data[i])
假设json是您一直在使用的字典列表,您将需要:
for item in data:
for key in item:
print(key, item[key])
来解释双重取消引用。
发布于 2019-06-27 07:20:16
您应该能够加载整个列表,而不只是使用json.load
重新构建它,然后迭代它和字典
import json
with open("file.json", "r") as read_file:
data = json.load(read_file)
for d in data:
for i, (k, v) in enumerate(d.items()):
print(i, k, v)
也就是说,我建议你将这个文件保存为一个普通的JSON文件,因为似乎每个dict中的第一个键/值都应该是一个ID
字段,所以它应该如下所示:
{
"0": {
"a":"3893",
"b":"2389",
"c":"1209"
},
"1": {
"a":"4308",
"b":"4560",
"c":"9127"
}
}
您可以使用字典理解来完成此操作:
with open("file.json", 'w') as out_file:
json.dump({d.pop(""): d for d in data}, out_file, indent=4)
然后你所需要做的就是简单地迭代这些字典:
with open("file.json", "r") as read_file:
data = json.load(read_file)
for _id, item in data.items():
for k, v in item.items():
print(_id, k, v)
https://stackoverflow.com/questions/56781824
复制相似问题