我有一个列表/字典,我试图从中获取密钥。
我试图打印密钥的地方是get_keys()
功能,这是需要修复的部分。
import json, io
business_json = "business.json"
def read_json(file):
lines = [line for line in open(file)]
js = [json.loads(line) for line in lines]
for item in js:
name = item.get("name")
return js
def get_keys(data):
for key in data.keys():
print(key)
def get_values_for_category(data, category):
values = []
for item in data:
values.append(item.get(category))
return values
def main():
json_data = read_json(business_json) #works
names = get_values_for_category(json_data, "name") #works
get_keys(json_data)
if __name__ == "__main__":
main()
我在get_keys(data)
上面得到的错误是:
AttributeError:' list'对象没有属性'键'
如果我改为尝试:
for key, val in data.items():
print(key, val)
或
for key in list(data).keys()
或for key in list(data.keys())
我遇到同样的问题。
所以,我有一个列表,需要密钥。但是,我找到的所有方式都可以获得列表'键返回错误。
我是如何在js
函数中获得read_json()
的问题?我很困惑为什么我可以使用密钥("name"
)获取值,但无法返回我可以查找的各种密钥...
编辑:完整的追溯是:
Traceback (most recent call last):
File "D:\Batman\Documents\- Datasets\yelp_dataset\dataset\Yelp_analysis.py", line 29, in <module>
main()<br>
File "D:\Batman\Documents\- Datasets\yelp_dataset\dataset\Yelp_analysis.py", line 25, in main
get_keys(json_data)<br>
File "D:\Batman\Documents\- Datasets\yelp_dataset\dataset\Yelp_analysis.py", line 13, in get_keys
for key in data.keys():<br>
AttributeError: 'list' object has no attribute 'keys'
(FWIW .json文件的摘要为here,数据的片段为here on PasteBin)。
答案 0 :(得分:2)
这是您阅读文件的方式。
def read_json(file):
return [json.loads(line) for line in open(file)]
我已经多次询问此数据集,您可能想要检查ijson
库以读取大型JSON文件。另外,我个人认为这些Yelp文件是通过Hadoop / Spark进程运行的。
无论如何,现在这是一个JSON对象列表,它们本身有密钥,而不是列表本身。
如果你要这样做
json_data = read_json(business_json)
get_keys(json_data)
然后get key函数看起来应该是这样的
def get_keys(data):
for obj in data:
print(obj.keys())