2016-09-24 9 views
3

독해력이있는 파이썬 사전을 만들었지 만 중복 키가있는 경우 마지막 항목이 최종 사전? https://www.python.org/dev/peps/pep-0274/을 보는 것이 나에게 명확하지 않습니까?중복 키가있는 경우 파이썬 사전의 독해력이 항상 "마지막 승리"입니까

new_dict = {k:v for k,v in [(1,100),(2,200),(3,300),(1,111)]} 
new_dict[1] #is this guaranteed to be 111, rather than 100? 
+1

예, 마지막 값이 추가됩니다. 'new_dict [1] = 111'을 이해하지 못했다면 100이나 111을 기대할 수 있습니까? 이해하기 쉽기 때문에 삽입 순서를 다르게하지는 않습니다. –

+1

항상 마지막 값이됩니다. 이전 값을 덮어 쓰는 것과 같습니다! – coder

+0

반복문이 이해력을 제공하는 마지막 값은 마지막으로 기록 된 값입니다. –

답변

4

마지막 항목이 이깁니다. 절에 "경우"A "에 대한"보통 다음에 콜론과 함께 분리 된 두 개의 표현을 필요로 나열하고 함축을 설정하는 반면에,

사전인가 이해 : 나는 이것을 위해 찾을 수있는 가장 좋은 문서는 Python 3 language reference, section 6.2.7에 . 이해력이 실행되면 결과 키 및 값 요소는 순서로 새 사전 에 삽입됩니다.

그 문서를 명시 적으로 마지막 항목 ({**{1: 1}, **{1: 2}}) 쉼표로 구분 된 키 - 값 쌍 ({1: 1, 1: 2})과 풀고 사전에 대한 승리한다고 :

하면 키의 쉼표로 구분 된 순서/datum pairs가 주어진다면, ... 당신은 key/datum리스트에서 같은 키를 여러 번 지정할 수 있고, 그 키에 대한 최종 사전의 값은 주어진 마지막 것입니다.

두 개의 별표 ** 사전을 나타냅니다. 피연산자는 매핑이어야합니다. 각 매핑 항목이 새 사전에 추가됩니다. 나중에 값은 이전 키/데이텀 쌍과 이전 사전 패킹으로 이미 설정된 값을 대체합니다.

1

당신이 의미하는 경우 pairs가 정렬 된 컬렉션을 다음 두 요소리스트 나 튜플 (예를 들어, 목록 또는 튜플)이다

{key: val for (key, val) in pairs} 

같은 뭔가 예, 이해는 순서를들을 것 마지막 값은 "승리"합니다.

쌍이 쌍의 쌍인 경우 "마지막 항목"이 없으므로 결과를 예측할 수 없습니다. 예 :

>>> n = 10 
>>> pairs = [("a", i) for i in range(n)] 
>>> {key:val for (key, val) in pairs} 
{'a': 9} 
>>> {key:val for (key, val) in set(pairs)} 
{'a': 2}