2016-07-14 3 views
1

辞書値がカウント付きの個別リストである出力を取得しようとしています。ここPython辞書が別個のリストカウントを取得する

は私の入力データである:ここ

event = [{'1a': ['tv', 'energy star tv']}, {'2a':['tv', 'energy star tv']}, {'3a':['tv', 'brand']}] 

は私の所望の出力である:ここ

{'tv': ['energy star tv', 2],['brand', 1]} 

は私の現在のコードである:ここ

event = [{'1a': ['tv', 'energy star tv']}, {'2a':['tv', 'energy star tv']}, {'3a':['tv', 'brand']}] 
event_values = [] 

for e in event: 
    event_values.append(e.values()) 

e_dict = {} 

for e in event_values: 
    if 'tv' == e[0][0]: 
     new_key = '' 
     new_key = e[0][0] 

     new_facet_value = '' 
     new_facet_value = e[0][1] 

     if new_key not in e_dict: # detects first key is not in dict 
      e_dict[new_key] = [new_facet_value, 1] 
     else: 
      i = e_dict[new_key][1] + 1 # increments count 
      j = [] 
      j = [new_facet_value, i] 
      e_dict[new_key] = j 
print e_dict 

は(望ましくない)私の電流であります出力:

{'tv': ['brand', 3]} 

答えて

1

{'tv': ['energy star tv', 2],['brand', 1]}は正当なpythonではありません。値のリストまたは辞書のようなより適切なデータ構造を意味するものと想定します。

あなたは、問題を単純化するためにcollections.Counter()を使用することができます。

from collections import Counter 
event = [{'1a': ['tv', 'energy star tv']}, {'2a':['tv', 'energy star tv']}, {'3a':['tv', 'brand']}] 
r = {} 
for e in event: 
    for a, b in e.values(): 
     r.setdefault(a, Counter())[b] += 1 
print(r) 

出力:

{'tv': Counter({'brand': 1, 'energy star tv': 2})} 

それはリストのリストにCounterバックを翻訳するための簡単なエクササイズです。

また、コードを読みやすくするためにcollections.defaultdictとそれを組み合わせることができます:

from collections import Counter, defaultdict 
event = [{'1a': ['tv', 'energy star tv']}, {'2a':['tv', 'energy star tv']}, {'3a':['tv', 'brand']}] 
r = defaultdict(Counter) 
for e in event: 
    for a, b in e.values(): 
     r[a][b] += 1 
print(r) 

出力:

defaultdict(collections.Counter, {'tv': Counter({'brand': 1, 'energy star tv': 2})}) 
0

このコード:

event = [{'1a': ['tv', 'energy star tv']}, {'2a':['tv', 'energy star tv']}, {'3a':['tv', 'brand']}] 

e_dict = {} 

for key, value in [d.values()[0] for d in event]: 
    if key in e_dict: 
     if value in e_dict[key]: 
      e_dict[key][value] = e_dict[key][value]+1 
     else: 
      e_dict[key][value] = 1 
    else: 
     e_dict[key] = {value: 1} 

print e_dict 

が生成されます:

{'tv': {'energy star tv': 2, 'brand': 1}} 
関連する問題