2017-10-27 8 views
0

私はキーを取得しようとしているリスト/辞書があります。リスト/辞書のキーを取得

私がキーを印刷しようとしているのは、修正が必要な部分である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' object has no attribute 'keys'

私が代わりにしようとした場合:

for key, val in data.items(): 
    print(key, val) 

または

for key in list(data).keys()for key in list(data.keys())私は同じ問題を取得します。

私はリストを持っており、キーが必要です。しかし、リストのキーを得るために私が見つけたすべての方法はエラーを返します。

​​機能でjsを取得する方法に問題がありますか?私は値を取得するためのキー("name")を使用することができる理由として困惑しているが、私は調べることができ、様々なキーを返すことができません...

EDIT:フルトレースバックがある:

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

のようになります。あなたは、リストまたはディレクトリを持っていますか?彼らは非常に異なるものです。明らかに、エラーはリストにはキーがないと言うので、そこに辞書が必要です –

+0

トレースバック全体を見ることはできますか? –

+0

@ cricket_007 - 私は 'type(js)'を使って辞書を持っていると思っていました。 '' '' – BruceWayne

答えて

2

これはファイルを読む方法です。

def read_json(file): 
    return [json.loads(line) for line in open(file)] 

私は、このデータセットは複数回について尋ねことが見てきた、とあなたは、大規模なJSONファイルを読むためにijsonライブラリをチェックアウトする場合があります。また、私は個人的には、これらのYelpファイルはHadoop/Sparkプロセスで実行されることを意図していると思います。

とにかく、それ自体はリスト自体ではなく、キーを持つJSONオブジェクトのリストです。

あなたはこの

json_data = read_json(business_json) 
get_keys(json_data) 

をやろうとしている場合は、GETキー機能はとても

def get_keys(data): 
    for obj in data: 
     print(obj.keys()) 
+0

おっと!その 'read_json()'はうまくいきます!あなたが表示する 'get_keys()'を実行すると、正しくキーを表示していますが(yay!)、何千もの行であるすべてのオブジェクト*に対してその操作を行っています。 ...どうすれば一度だけ表示できますか?私は 'data {0}:print(obj.keys())'でobjを試みましたが、 'AttributeError 'str'オブジェクトには属性 'keys'がありません。 – BruceWayne

+0

'print(data [0] .keys())' ...ループしない –

+0

ああ、そうです!ありがとう!!私はljsonも見ていきます:D – BruceWayne

関連する問題