0

在解析字典列表时遇到麻烦,通过循环访问每个字典的所有键值对,以便一次处理每个 kv。

我有一个包含字典列表的 json 文件。简化形式:

[
{"": "0", "a": "3893", "b": "2389", "c": "1209"}, 
{"": "1", "a": "4308", "b": "4560", "c": "9127"},
... 
] 

我想遍历每个字典,并且对于每个键值对(不包括第一个,假设它将被跳过,因为键是空的)每次迭代,可以访问一个字典的 a,b,c kv 对,以便它们被单独处理。

我试过:

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

代码有问题,我还不知道如何实现上面的,可能很简单但我还没有找到。

4

3 回答 3

1

您的问题的第一部分是在您的枚举调用中:

    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-26T23:11:40.523 回答
0

您应该能够加载整个列表而无需仅使用重建它json.load,然后迭代它和 dicts

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"
    }
}

您可以使用 dict 理解来执行以下操作:

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)
于 2019-06-26T23:20:16.240 回答
0
    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-26T23:21:59.337 回答