【发布时间】:2017-10-27 23:58:51
【问题描述】:
我有一个列表/字典,我正试图从中获取密钥。
我要打印密钥的是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' 对象没有属性 'keys'
如果我改为尝试:
for key, val in data.items():
print(key, val)
或
for key in list(data).keys() 或 for key in list(data.keys()) 我遇到了同样的问题。
所以,我有一个清单,需要钥匙。但是,我找到的所有获取列表键的方法都会返回错误。
在read_json() 函数中获取js 的方式有问题吗?我很困惑为什么我可以使用键 ("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,数据的 sn-p 是 here on PasteBin)。
【问题讨论】:
-
您有列表或目录吗?它们是非常不同的东西。显然错误说列表没有键,所以你需要一个字典
-
我可以看到整个回溯吗?
-
@cricket_007 - 我以为我有一本字典,使用
type(js)我得到<class 'list'> -
@cricket_007 你说“它们是绿柱石不同的东西”
-
愚蠢的自动更正 ;)
type(data)在获取键函数中是一个列表
标签: json python-3.x list