Python 迭代 'Nonetype' 使用 'in' 语句
Python iteration 'Nonetype' using 'in' statement
嗨,所以我使用以下代码将 JSON 文件加载到列表中:
import json
postal_mtl = ['H9W','H4W','H9P','H3B','H3A','H2Z','H3H','H3G','H3X','H9J','H1B','H1G','H1H','H4X','H2Y','H9R','H3Z','H3Y']
data = []
with open('business.json',encoding="utf8") as f:
for line in f:
data.append(json.loads(line))
现在我试图在此数据集中查找蒙特利尔的餐馆数量(来自 Yelp)。我尝试了以下代码:
compteur3 = 0
for i in range(len(data)):
if data[i]['postal_code'][0:3] in postal_mtl and 'Restaurants' in data[i]['categories']:
compteur3 += 1
print(compteur3)
但是我收到一条错误消息说 "argument of type 'NoneType' is not iterable" 我猜 Python 将日期 [i]['categories'] 视为 Nonetype?这是为什么 ?如果我输入以下内容,我可以看到它显然是一个字符串:
data[5]['categories']
'Shipping Centers, Couriers & Delivery Services, Local Services, Printing Services'
现在我只想遍历我的数据列表中的所有元素并找到我们有单词 'Restaurants' 的每一行(我修复了蒙特利尔的东西)...有什么想法吗?谢谢!
根据提供的代码,似乎错误很可能来自 if 条件。具体来说,它很可能来自语句 'Restaurants' in data[i]['categories']
。在幕后,Python 试图遍历 data[i]['categories']
以查看 'Restaurants' 是否在其中。如果 data[i]['categories']
是 None
,则会导致此错误。
这可能是由于 JSON 字符串没有按您预期的方式格式化。也许,如果 'Categories' 字段中没有列出任何类别,则会放置 null
而不是空列表。要在您的代码中检查这一点,您可以尝试以下操作:
compteur3 = 0
for i in range(len(data)):
is_inmontreal = data[i]['postal_code'][0:3] in postal_mtl
is_restaurant = data[i]['categories'] and 'Restaurants' in data[i]['categories']
if is_inmontreal and is_restaurant:
compteur3 += 1
print(compteur3)
以上,我简单的把条件分成了两部分。从功能上讲,这与将条件放在一行中是一样的,只是让它更清晰一些。但是,我还在 is_restaurant
中添加了一个检查,以查看 data[i]['categories']
是否具有正真值。实际上,这将检查该值是否不是 None
并且它不是一个空列表。如果你真的想显式,你也可以
is_restaurant = data[i]['categories'] is not None and 'Restaurants' in data[i]['categories']
根据数据的脏程度,您可能需要更进一步并使用异常处理。不过,以上只是推测,我不知道数据是什么样的。
嗨,所以我使用以下代码将 JSON 文件加载到列表中:
import json
postal_mtl = ['H9W','H4W','H9P','H3B','H3A','H2Z','H3H','H3G','H3X','H9J','H1B','H1G','H1H','H4X','H2Y','H9R','H3Z','H3Y']
data = []
with open('business.json',encoding="utf8") as f:
for line in f:
data.append(json.loads(line))
现在我试图在此数据集中查找蒙特利尔的餐馆数量(来自 Yelp)。我尝试了以下代码:
compteur3 = 0
for i in range(len(data)):
if data[i]['postal_code'][0:3] in postal_mtl and 'Restaurants' in data[i]['categories']:
compteur3 += 1
print(compteur3)
但是我收到一条错误消息说 "argument of type 'NoneType' is not iterable" 我猜 Python 将日期 [i]['categories'] 视为 Nonetype?这是为什么 ?如果我输入以下内容,我可以看到它显然是一个字符串:
data[5]['categories']
'Shipping Centers, Couriers & Delivery Services, Local Services, Printing Services'
现在我只想遍历我的数据列表中的所有元素并找到我们有单词 'Restaurants' 的每一行(我修复了蒙特利尔的东西)...有什么想法吗?谢谢!
根据提供的代码,似乎错误很可能来自 if 条件。具体来说,它很可能来自语句 'Restaurants' in data[i]['categories']
。在幕后,Python 试图遍历 data[i]['categories']
以查看 'Restaurants' 是否在其中。如果 data[i]['categories']
是 None
,则会导致此错误。
这可能是由于 JSON 字符串没有按您预期的方式格式化。也许,如果 'Categories' 字段中没有列出任何类别,则会放置 null
而不是空列表。要在您的代码中检查这一点,您可以尝试以下操作:
compteur3 = 0
for i in range(len(data)):
is_inmontreal = data[i]['postal_code'][0:3] in postal_mtl
is_restaurant = data[i]['categories'] and 'Restaurants' in data[i]['categories']
if is_inmontreal and is_restaurant:
compteur3 += 1
print(compteur3)
以上,我简单的把条件分成了两部分。从功能上讲,这与将条件放在一行中是一样的,只是让它更清晰一些。但是,我还在 is_restaurant
中添加了一个检查,以查看 data[i]['categories']
是否具有正真值。实际上,这将检查该值是否不是 None
并且它不是一个空列表。如果你真的想显式,你也可以
is_restaurant = data[i]['categories'] is not None and 'Restaurants' in data[i]['categories']
根据数据的脏程度,您可能需要更进一步并使用异常处理。不过,以上只是推测,我不知道数据是什么样的。