2016-07-14 2 views
1

사전 값이 개수가있는 고유 목록 인 출력을 얻으려고 노력하고 있습니다.파이썬 사전에서 고유 목록 수 얻기

여기
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]}은 합법적 인 파이썬이 아닙니다. 값의 목록 또는 사전과 같은 더 적절한 데이터 구조를 의미한다고 가정합니다.

당신은 문제를 단순화하기 위해 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}} 
관련 문제