为什么我不能通过循环从这本字典中提取数据?
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 处没有几何键。您可能想要专门研究这些条目,看看是否应将它们从您的数据中删除,或者您是否只需要将这些行的关键字更改为其他内容。
我正在从 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 处没有几何键。您可能想要专门研究这些条目,看看是否应将它们从您的数据中删除,或者您是否只需要将这些行的关键字更改为其他内容。