2016-07-29 3 views
0

두 개의 사전에서 키 - 값 쌍을 상호 연관시키고 싶습니다. 예를 들어두 개의 사전에서 키 - 값 쌍을 결합

:

a_dict = [a:1, b:1, c:2, d:3] 

b_dict = [z:1, xy:2, gf:4, fd:4] 

나는 다음과 같이 인쇄하도록 결합에 대해 갈 수있는 방법 :

:

a, 1, z, 1 

b, 1, xy, 2 

c, 2, gf, 4 

d, 3, fd, 4 

로직 내가 dicts의 키 - 값 쌍을 가져 오는 데 사용

a_dict = dict() 
for i in file: 
    a = i.split("|")[3] 
    if a in a_dict.keys(): 
     a_dict[a] += 1 
    else: 
     a_dict[a] = 1 

for a in a_dict.keys(): 
    b_dict = dict() 
    for i in file: 
     if a not in i: 
      continue 
     else: 
      b = i.split("|")[5] 
      if b in b_dict.keys(): 
       b_dict[b] += 1 
      else: 
       b_dict[b] = 1 
+1

사전의 항목이 서로 일치하는 방식을 결정하는 논리 란 무엇입니까? 파이썬의'dict'은 본질적으로 순서가 없습니다. 그래서 당신이 어떻게 일치하는지 신경 쓰지 않으면, 반복 명령에 의존 할 수 없습니다. 가치에 따라 주문해야합니까? 그렇다면 동일한 가치의 순서에 관심이 있습니까 (예 :'b'가'a' 또는'fd' 전에'gf '앞에 올 수 있습니까?)? – Blckknght

+0

적시에 답변 해 주셔서 감사합니다. 키를 획득 한 방법과 각 사전의 값을 반영하여 질문을 편집했습니다. – ClamSnorkel

+0

편집을해도, 사용자가하려는 일이 명확하지 않습니다.사전은 순서가 지정되지 않으므로 어떻게 키를 결합하고 싶습니까? 귀하의 예제에서'a'가'dict1'의 인스턴스 생성에서 첫 번째 키이기 때문에'dict1.keys() '의 첫 번째 항목이'a'가 될 것이라고 (일반적으로) 의미하지 않습니다 – mwm314

답변

1

먼저 의견에서 말한 것처럼 사전에는 순서가 없습니다. 주문과 관련된 키 (예 : a_dict에 삽입 한 첫 번째 키와 b_dict에 삽입 한 첫 번째 키가 일치해야 함)를 결합하려면 OrderedDict을 사용해야합니다. 따라서 파일에서 읽을 때 a_dictb_dictOrderedDict 개체로 변경해야합니다. 는 항상 수도 정상적인 사전 (와 작업 의존하지 않지만

a , 1 , z , 1 
b , 1 , xy , 2 
c , 2 , gf , 4 
d , 3 , fd , 4 

이는 것을 관찰 :

from collections import OrderedDict 

a_dict = OrderedDict() 
b_dict = OrderedDict() 

a_dict["a"] = 1 
a_dict["b"] = 1 
a_dict["c"] = 2 
a_dict["d"] = 3 

b_dict["z"] = 1 
b_dict["xy"] = 2 
b_dict["gf"] = 4 
b_dict["fd"] = 4 

for a_key, b_key in zip(a_dict, b_dict): 
    print a_key, ", ", a_dict[a_key], ", ", b_key, ", ", b_dict[b_key] 

출력 : 여기에 당신이 요구하는지 어떻게 키를 인쇄하는 방법의 예 키에). 과 같이 a_dictb_dict를 초기화 위의 대답을 변경합니다

a_dict = dict() 
b_dict = dict() 

당신은 아마도 키가 일치하지 않는 다른 출력을 볼 수 있습니다. 내 콘솔은 저를 준다 : 이야기의

a , 1 , xy , 2 
c , 2 , gf , 4 
b , 1 , z , 1 
d , 3 , fd , 4 

도덕적하십시오 dict 때 주문 사항을 사용하지 마십시오. 그것들은 단순히 키 값 저장소이며, 키의 순서는 임의적입니다.

+0

글쎄, 많이 설명해 주셔서 대단히 감사합니다! – ClamSnorkel

0

1 단계) 목록으로 변환하십시오. 난 내 휴대 전화에서이 일을하고 있기 때문에 나는 형식에 대해 사과

for i in range(len(dict1)): 
>print(dict1[i][0],dict1[i][1],dict2[i][0], 
dict1[i][1]) 

:

dict1=dict1.items() 
dict2=dict2.items() 

단계 그들을 통해 2) 루프 그래서 같은 크기이다) (DICT (지금 나열 모두 가정).

NB> = 탭

편집 : 난 내 컴퓨터 앞에 앉아 있지 않다 때문에이 작동하는지 내가 확인할 수 없습니다.

관련 문제