2013-03-15 2 views
0

사전에서 반복 할 때 루프의 값을 어떻게 변경합니까? 예를 들어 는 :루프 중 사전의 값

for i in listt: 
    for key in mydict: 
      mydict[key]=i 

을하지만이 작동하지 않습니다

listt=[1,4,2] 
mydict=[a:d, c:b, q:r] 

내가 만들려고 노력하고 있습니다. i 번째 값이 마지막 값이되는 것입니다. 내 새 사전에, 그래서 그것은 항상 : 2, c : 2 등 a:1, b:4, q:2 대신. 내가 생각하는 i 번째 값을 저장하고 그 값을 사용하여 사전의 값을 변경해야합니다. 비록 내가 무엇에지고 있는지에 관해 명확히하지 않지만! 어떤 도움을 주시면 감사하겠습니다!

답변

1

dicts의 키는 주문되지 않습니다. 따라서 listt의 항목과 dict의 키 mydict에있는 항목 간의 페어링을 제어 할 수 없습니다.

그러나, OrderedDict의 키는 주문한 있습니다

import collections 

listt=[1,4,2] 
mydict=collections.OrderedDict([('a','d'), ('c','b'), ('q','r')]) 
for item, key in zip(listt, mydict): 
    mydict[key] = item 

print(mydict)  

수익률은

OrderedDict([('a', 1), ('c', 4), ('q', 2)]) 
0

여기 dict에 몇 가지 오해가있다 : 당신이 원하는 것처럼

는 '보인다 새 목록에서 제공된 값을 사용하여 동일한 키와 새 값으로 이력서를 업데이트하십시오. 문제는, dictonary는 순서대로 저장된 항목을 유지하지 않는다는 것입니다. 사전 {a:d, c:b, q:r}은 사전을 통해 [a, c, q] 순서로 반복 할 수 있음을 의미하지 않습니다.

또한 중첩 된 for-loops를 사용하므로 모든 값이 listt의 마지막 vlue로 끝나는 이유입니다.

collections.OrderedDict를 사용하면 모든 것을 순서대로 유지할 수 있습니다. 중첩 된 for-loops 대신에 zip을 사용하여 반복자를 결합하십시오.

그래서

, 코드는 다음과 같습니다

from collections import OrderedDict 

listt = [1, 4, 2] 
mydict = OrderedDict([(a, d), (c, b), (q, r)]) 

mydict = OrderedDict(zip(mydict.keys(), listt))