即使存在密钥,也会遇到KeyError

2024-10-01 11:24:22 发布

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

dir = {"sample":[
{ "key1":"data1" }

,
{ "key1":"data2" }

,
{ "key2":"data3" }

,
{ "key2":"data4" }
]
}

使用我的代码:

listKey1 = []
listKey2 = []
with open(dir) as json_file:
   data = json.load(json_file)
   for p in data['sample']:

        key1data = p['key1']
        print("key1: " + key1data)
        listKey1.append(key1data)
      
        key2data = p['key2']
        print("key2: " + key2data)
        listKey2.append(key2data)
            

我试图将key1和key2键下的数据存储到listKey1和listKey2中,但我得到了错误:

  KeyError: 'key1'
  KeyError: 'key2'

正如我们在我的文件中看到的,key1和key2都存在


Tags: samplejsondatadirfileprintkey2key1
3条回答

您可以迭代元素,通过key进行比较,并相应地存储数据:

dd = {
      "sample":
        [
            { "key1":"data1" },
            { "key1":"data2" },
            { "key2":"data3" },
            { "key2":"data4" }
        ]
    }

key1data = []
key2data = []
for elem in dd['sample']:
    for key, val in elem.items():
        if key == "key1":
            key1data.append(elem.get("key1"))
        else:
            key2data.append(elem.get("key2"))

print(key1data)
print(key2data)

输出:

['data1', 'data2']                                                                                                                                                           
['data3', 'data4'] 

这是修改后的代码。在使用之前,只需检查密钥是否存在

listKey1 = []
listKey2 = []
with open(dir) as json_file:
   data = json.load(json_file)
   for p in data['sample']:
        if "key1" in p.keys(): # check if key exists on the current index
            key1data = p['key1']
            print("key1: " + key1data)
            listKey1.append(key1data)
        if "key2" in p.keys(): # check if key exists on the current index
            key2data = p['key2']
            print("key2: " + key2data)
            listKey2.append(key2data)

这是我得到的输出

key1: data1
key1: data2
key2: data3
key2: data4

下面是发生密钥错误的原因。请注意,根据索引有不同的键

index [ 0 ] : { "key1":"data1" } - The key is "key1"-

,
index [ 1 ] :{ "key1":"data2" } - The key is "key1"

,
index [ 2 ] :{ "key2":"data3" } - The key is "key2"

,
index [ 3 ] :{ "key2":"data4" } - The key is "key2"

循环p值时不总是有key1key2的问题。它要么有一个,要么有另一个

因此,当它找到key1时,它会打印数据,但会为key2给出一个错误。 当它找到key2时,它会打印数据,但会为key1给出一个错误

一个好的选择是使用get()方法。如果键存在,它将返回值,否则它将给出默认值

请尝试下面的代码

listKey1 = []
listKey2 = []
with open(dir) as json_file:
   data = json.load(json_file)
   for p in data['sample']:

        key1data = p.get('key1',"")
        print("key1: " + key1data)
        listKey1.append(key1data)
      
        key2data = p.get('key2',"")
        print("key2: " + key2data)
        listKey2.append(key2data)
            

相关问题 更多 >