2017-05-03 2 views
0

私はこのコードでjsonからデータを読みました。リストから単語を数えるには?

json_file='report.json' 

json_data=open(json_file) 
data = json.load(json_data) 

t0 = [] 
t1 = [] 
tn = [] 

#counts = Counter(data['behavior']['processes'][3]['calls']) 
print (type(data['behavior']['processes'][3]['calls'])) 

for i in data['behavior']['processes'][3]['calls']: 

    t0 = i['arguments'] 
    print(t0) 

json_data.close() 

このようなデータを示します。

<class 'list'> 
aa 
bb 
aa 
cc 
bb 
cc 
aa 

私は結果は私がCounter(data['behavior']['processes'][3]['calls'])でコメントを解除する場合は、エラーが表示されます、CC = 2

、AA = 3、BB = 2であるべき単語のfrequentcyをカウントします。

TypeError: unhashable type: 'dict' 

リストから単語をカウントするには?

+0

を行うことができ、あなたは私達にあなたのサンプルデータを表示することはできますか? –

答えて

0

カウンタにはリストを入力する必要があります。私はあなたが使用しているデータを持っていけないので、

from collections import Counter 

#create a list from your data 
mylist = [i['arguments'] for i in data['behavior']['processes'][3]['calls']] 

#make a dict of counts 
counter_dict = Counter(mylist) 

#print out counts per item 
for val in counter_dict: 
    print '%i has %i occurrences' % (val, counter_dict[val]) 

(コード未テスト)

0

はそれをテストしていません。
しかし、これはうまくいくと思います。

json_file='report.json' 

json_data=open(json_file) 
data = json.load(json_data) 

t0 = [] 
t1 = [] 
tn = [] 

#counts = Counter(data['behavior']['processes'][3]['calls']) 
print (type(data['behavior']['processes'][3]['calls'])) 

data_count = {} 
for i in data['behavior']['processes'][3]['calls']: 

    t0 = i['arguments'] 
    count = data_count.get(t0) 
    if count is None: 
     data_count[t0] = 1 
    else: 
     data_count[t0] = count + 1 

    print(t0) 

json_data.close() 
print(data_count) 
1

あなたは

Counter(map(lambda x:x['argument'], data['behavior']['processes'][3]['calls'])) 
1
counterDict = {} # <== 
json_file='report.json' 
json_data=open(json_file) 
data = json.load(json_data) 

t0 = [] 
t1 = [] 
tn = [] 

#counts = Counter(data['behavior']['processes'][3]['calls']) 
print (type(data['behavior']['processes'][3]['calls'])) 

for i in data['behavior']['processes'][3]['calls']: 

    t0 = i['arguments'] 
    counterDict[t0] = counterDict.get(t0,0)+1 # <=== 

json_data.close() 

print(counterDict) 
関連する問題