사전에 사전을 추가 하시겠습니까? [복제]
이 질문에는 이미 답변이 있습니다.
- 사전에 대한 파이썬“확장” 6 답변
기존 사전이 두 개 있는데 그 중 하나를 다른쪽에 '추가'하고 싶습니다. 즉, 다른 사전의 키, 값을 첫 번째 사전으로 만들어야 함을 의미합니다. 예를 들면 다음과 같습니다.
orig = {
'A': 1,
'B': 2,
'C': 3,
}
extra = {
'D': 4,
'E': 5,
}
dest = # something here involving orig and extra
print dest
{
'A': 1,
'B': 2,
'C': 3,
'D': 4,
'E': 5
}
나는 이것이 for
루프를 통해 달성 될 수 있다고 생각 하지만 (어쩌면?)이 방법을 구할 수있는 사전 방법이나 다른 모듈이 있습니까? 내가 사용하는 실제 사전은 정말 큽니다 ...
넌 할 수있어
orig.update(extra)
또는 orig
수정 하지 않으려면 먼저 사본을 만드십시오.
dest = dict(orig) # or orig.copy()
dest.update(extra)
extra 및 orig에 겹치는 키가 있으면 최종 값이 extra에서 가져옵니다. 예를 들어
>>> d1 = {1: 1, 2: 2}
>>> d2 = {2: 'ha!', 3: 3}
>>> d1.update(d2)
>>> d1
{1: 1, 2: 'ha!', 3: 3}
이것을 달성하는 가장 비현실적이고 (약간 빠른) 방법은 다음과 같습니다.
dest = {**orig, **extra}
또는 해결해야 할 문제에 따라 다음을 수행 할 수 있습니다.
dest = {**orig, 'D': 4, 'E': 5}
변경하고 싶지 않다고 가정하면 orig
다른 답변과 같이 복사하고 업데이트하거나 두 사전의 모든 항목을 dict 생성자에 전달하여 한 번에 새 사전을 만들 수 있습니다.
from itertools import chain
dest = dict(chain(orig.items(), extra.items()))
또는 itertools없이 :
dest = dict(list(orig.items()) + list(extra.items()))
당신 만의 결과를 전달해야합니다 items()
으로 list()
파이썬 3는 2.X에 dict.items()
그냥 할 수 있도록 이미 목록을 반환합니다 dict(orig.items() + extra.items())
.
보다 일반적인 유스 케이스로, 하나의 dict로 결합하려는 더 큰 dict 목록이 있다고 가정하면 다음과 같이 할 수 있습니다.
from itertools import chain
dest = dict(chain.from_iterable(map(dict.items, list_of_dicts)))
dict.update()
원하는대로 할 것 같습니다 ...
>> orig.update(extra)
>>> orig
{'A': 1, 'C': 3, 'B': 2, 'E': 5, 'D': 4}
>>>
어쩌면 원래 사전을 업데이트하고 싶지는 않지만 사본으로 작업하십시오.
>>> dest = orig.copy()
>>> dest.update(extra)
>>> orig
{'A': 1, 'C': 3, 'B': 2}
>>> dest
{'A': 1, 'C': 3, 'B': 2, 'E': 5, 'D': 4}
.update () 메소드가 있습니다 :)
update ([other]) 기존 키를 덮어 쓰면서 다른 키 / 값 쌍으로 사전을 업데이트합니다. 반환 없음
update ()는 다른 사전 객체 또는 키 / 값 쌍의 반복 가능 (튜플 또는 길이 2의 다른 반복 가능)을 허용합니다. 키워드 인수가 지정되면 사전은 해당 키 / 값 쌍으로 업데이트됩니다. d.update (red = 1, blue = 2).
버전 2.4으로 변경 : 인수가 키 / 값 쌍을 반복 가능하게하고 키워드 인수를 허용했습니다.
내가주고 싶은 대답은 "use collections.ChainMap"이지만 파이썬 3.3에서만 추가되었다는 것을 발견했습니다. https://docs.python.org/3.3/library/collections.html#chainmap-objects
3.3 소스에서 클래스를 탐색 할 수 있습니다 : http://hg.python.org/cpython/file/3.3/Lib/collections/ init .py # l763
기능이 적은 Python 2.x 호환 버전 (동일한 저자)은 다음과 같습니다. http://code.activestate.com/recipes/305268-chained-map-lookups/
dict.merge를 사용하여 하나의 사전을 다른 사전으로 확장 / 덮어 쓰거나 둘 다를 병합하는 추가 사본을 작성하는 대신 둘 다 순서대로 검색하는 검색 체인을 작성합니다. 랩핑하는 매핑을 복제하지 않기 때문에 ChainMap은 메모리를 거의 사용하지 않으며 하위 매핑에 대한 수정 사항을 나중에 볼 수 있습니다. 순서가 중요하기 때문에 체인을 사용하여 기본값을 계층화 할 수도 있습니다 (예 : 사용자 prefs> config> env).
두 개의 사전을 결합하거나 병합하는 3 개의 라이너 :
dest = {}
dest.update(orig)
dest.update(extra)
그러면 및 dest
을 수정하지 않고 새 사전 을 만듭니다 .orig
extra
참고 : orig
및 의 키 값이 다른 경우을 ( extra
를) extra
재정의 orig
합니다.
참고 URL : https://stackoverflow.com/questions/8930915/append-dictionary-to-a-dictionary
'Programing' 카테고리의 다른 글
결과가 비어있을 때 LINQ는 무엇을 반환합니까? (0) | 2020.03.19 |
---|---|
Javascript를 사용하여 CSS 파일을로드하는 방법은 무엇입니까? (0) | 2020.03.19 |
C에서 >>> = 연산자는 무엇입니까? (0) | 2020.03.19 |
자바 스크립트에 객체가 있는지 확인 (0) | 2020.03.19 |
고정 페이지 헤더가 인 페이지 앵커와 겹칩니다. (0) | 2020.03.19 |