为什么我不能通过循环从这本字典中提取数据?

Why I can not extract data from this dictionary though a loop?

我正在从 data 中提取,它是字典类型。

import urllib3
import json

http = urllib3.PoolManager()
url = 'https://raw.githubusercontent.com/leanhdung1994/BigData/main/fr-esr-principaux-etablissements-enseignement-superieur.json'
f = http.request('GET', url)
data = json.loads(f.data.decode('utf-8'))

data[0]["geometry"]["coordinates"]

geo = []
n = len(data)
for i in range(n):
    geo.append(data[i]["geometry"]["coordinates"])

它returns一个错误

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-26-52e67ffdcaa6> in <module>
     12 n = len(data)
     13 for i in range(n):
---> 14     geo.append(data[i]["geometry"]["coordinates"])

KeyError: 'geometry'

这很奇怪,因为,当我只运行data[0]["geometry"]["coordinates"]时,它returns[7.000275, 43.58554]没有错误。

能否详细说明一下这个问题?

发生错误是因为在少数响应词典中您没有使用“几何”键。 在附加到地理列表之前检查“几何”键是否存在于响应字典中。

试试下面的代码。

import urllib3
import json

http = urllib3.PoolManager()
url = 'https://raw.githubusercontent.com/leanhdung1994/BigData/main/fr-esr-principaux-etablissements-enseignement-superieur.json'
f = http.request('GET', url)
data = json.loads(f.data.decode('utf-8'))


geo = []
n = len(data)
for i in range(n):
    if "geometry" in data[i]:
        geo.append(data[i]["geometry"]["coordinates"])
print(geo)

我认为问题在于您的数据中有些地方没有“地理”键。首先,您的数据结构在技术上不是字典。它是 'dictionaries' 的 'list'。您可以使用 print(type(data)) 和 print(type(data[0]) 命令来判断。

我使用了你的代码,但添加了以下几行:

dataStructure = data[0]
print(type(dataStructure))

geo = []
n = len(data)
for i in range(321):
    try:
        geo.append(data[i]["geometry"]["coordinates"])
    except:
        print(i)

如果你 运行 这个,你会看到在索引位置 64 和 130 处没有几何键。您可能想要专门研究这些条目,看看是否应将它们从您的数据中删除,或者您是否只需要将这些行的关键字更改为其他内容。