获取列表/词典中的键

时间:2017-10-27 23:58:52

标签: json python-3.x list

我有一个列表/字典,我试图从中获取密钥。

我试图打印密钥的地方是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)。

1 个答案:

答案 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())