Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python迭代';非类型';使用';在';陈述_Python_Json_Dataset_Iteration_Nonetype - Fatal编程技术网

Python迭代';非类型';使用';在';陈述

Python迭代';非类型';使用';在';陈述,python,json,dataset,iteration,nonetype,Python,Json,Dataset,Iteration,Nonetype,您好,我使用以下代码将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:

您好,我使用以下代码将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))
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)
现在,我试图在这个数据集中找到蒙特利尔的餐馆数量(来自Yelp)。我尝试了以下代码:

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))
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)
但是我得到一个错误,说“类型为'NoneType'的参数不可iterable”,我猜Python认为日期[I]['categories']是一个非类型?为什么呢?如果我输入以下内容,我可以看到它显然是一个字符串:

data[5]['categories']
'Shipping Centers, Couriers & Delivery Services, Local Services, Printing Services'

现在我只想迭代我的数据列表中的所有元素,并找到每一行我们有“餐馆”这个词的地方(我把蒙特利尔的东西修好了)。。。有什么想法吗?谢谢

根据提供的代码,错误似乎最有可能来自if条件。具体来说,它很可能来自数据[i]['categories']中的语句
'Restaurants'。在幕后,Python试图遍历
数据[i]['categories']
,以查看其中是否有“餐厅”。如果
data[i]['categories']
None
,则会导致此错误

这可能是由于JSON字符串未按预期的方式格式化所致。也许,如果“类别”字段中未列出任何类别,则会放置一个
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
,以查看
数据[I]['categories']
是否具有正真值。实际上,这将检查该值是否不是
None
,并且不是空列表。如果你真的想表达清楚,你也可以这样做

is_restaurant = data[i]['categories'] is not None and 'Restaurants' in data[i]['categories']

根据数据的脏程度,您可能需要进一步使用异常处理。然而,以上只是猜测,因为我不知道数据是什么样子。

顺便说一下,在数据中,所有元素都是这种格式:
{'business_id':'1sweh84yjxfytovillxoaq','name':'Arizona Biltmore Golf Club','address':'2818 E Camino Acequia Drive','city':'Phoenix','state':'AZ','postal_code':'85016','latitude':33.5221425,'longitude':-112.0184807,'stars':3.0,'review(count':5,'是开放的:'0','attributes':{'GoodForKids',“类别”:“高尔夫,积极生活”,“小时数”:无}
基本上是这样一个字典列表,我确信我使用的键是正确的。您可能有条目缺少
邮政编码
类别
。您可以对数据中的条目迭代
,然后检查条目上是否存在邮政编码和类别,然后再进行comparison.@ABASSSESSAY邮政编码或类别似乎没有任何问题,我可以对类别运行以下操作,并且不会得到任何错误:
counter=0,用于范围内的I(len(data)):如果数据[I]['categories']=='Restaurants':counter+=1打印(compteur)
它将返回0,对于邮政编码,它也已经起作用了。问题是“类别”中的每个元素都有多个字符,我只想要“餐厅”