2014-09-21 1 views
0

defaultdict를 사용하지 않고 이것을 수행하는 가장 쉬운 방법은 무엇입니까? 코어 파이썬 기능을 사용하기에 너무 성가신 경우 defaultdict는 괜찮습니다.사전의 동일한 키에 다른 값의 여러 목록 추가하기

목록으로 키 목록이 있습니다.

값이있는 목록을 몇 개 만들 수있는 짧은 루프가 있습니다. 그 중 하나는 dict의 키에 매핑하려고합니다.

결국 결국 키당 여러 값을 얻게됩니다. 그런 다음 인쇄하십시오. 이것은 내가 지금까지 무엇을 가지고

...이 코드

Keys = ['A','B','C'] #the keys that will be mapped to all values start here in a list    
Values = [] #starting with empty values 
Dict = dict(zip(Keys, Values)) #starting with a dict of keys mapped to empty values 

x=0 
while x < 5: 
    x += 1 
    MoreValues = [1+x,2+x,3] #adding x only to give some different values 
    Dict = dict(zip(Keys, MoreValues)) 

    print Dict 

출력은 다음과 같습니다

{'A': 2, 'C': 3, 'B': 3} 
{'A': 3, 'C': 3, 'B': 4} 
{'A': 4, 'C': 3, 'B': 5} 
{'A': 5, 'C': 3, 'B': 6} 
{'A': 6, 'C': 3, 'B': 7} 

질문을 보는 또 다른 방법은, 어떻게 이러한 결과 사전을 병합 할 수 있습니다 이렇게 함께 A, B, C의 키는 여러 값으로 매핑되며,이 설정에서는 for 루프를 사용하여 값 목록을 생성합니다.

출력은 다음과 같아야합니다

{'A': [2, 3, 4, 5, 6], 'C': [3, 3, 3, 3, 3], 'B': [3, 4, 5, 6, 7]} 
물론
+0

왜 defaultdict를 사용하지 않으시겠습니까? – karthikr

+0

필자는 핵심 파이썬 기능을 통해이를 수행하는 방법을 알고 싶었지만 너무 복잡하다면 defaultdict는 괜찮습니다. – Steve

+0

다음과 같은 몇 가지 방법이 있습니다 : http://stackoverflow.com/questions/5946236/how-to-merge-multiple-dicts-with-same-key – karthikr

답변

0
keys = "ABC" 
answer = {} 

x = 1 
while x<5: 
    for key in keys: 
     if key not in answer: 
      answer[key] = [] 
     answer[key].append(x) 
    x += 1 

, 당신은 while 루프에서 초기화를 움직일 수 :

keys = "ABC" 
answer = {} 
for key in keys: 
    if key not in answer: 
     answer[key] = [] 

x = 1 
while x<5: 
    for key in keys: 
     answer[key].append(x) 
    x += 1 
0

당신은 또한 defaultdict

from collections import defaultdict 
d = defaultdict(lambda: []) 

for x in range(5): 
    for key in keys: 
     d[key].append(x) 
0
를 사용할 수 있습니다

이 코드를 시도해 볼 수 있습니다. 세부 사항이 없으면 일부 pls에게 문의하십시오.

>>> d1={'A': 2, 'C': 3, 'B': 3l} 
>>> d2={'A': 3, 'C': 3, 'B': 4} 
>>> d3={'A': 4, 'C': 3, 'B': 5} 
>>> d4={'A': 5, 'C': 3, 'B': 6} 
>>> d5={'A': 6, 'C': 3, 'B': 7} 
>>> keys=[d1.keys(),d2.keys(),d3.keys(),d4.keys(),d5.keys()] 
>>> values=[d1.values(),d2.values(),d3.values(),d4.values(),d5.values()] 
>>> keys 
[['A', 'C', 'B'], ['A', 'C', 'B'], ['A', 'C', 'B'], ['A', 'C', 'B'], ['A', 'C', 'B']] 
>>> values 
[[2, 3, 3], [3, 3, 4], [4, 3, 5], [5, 3, 6], [6, 3, 7]] 
>>> set_keys=[set(list(i)).pop() for i in zip(*keys)] 
>>> set_keys 
['A', 'C', 'B'] 
>>> set_values=zip(*values) 
>>> set_values 
[(2, 3, 4, 5, 6), (3, 3, 3, 3, 3), (3, 4, 5, 6, 7)] 
>>> set_values=map(list,zip(*values)) 
>>> set_values 
[[2, 3, 4, 5, 6], [3, 3, 3, 3, 3], [3, 4, 5, 6, 7]] 
>>> dict(zip(set_keys,set_values)) 
{'A': [2, 3, 4, 5, 6], 'C': [3, 3, 3, 3, 3], 'B': [3, 4, 5, 6, 7]} 
>>> 
관련 문제