사전을 사전에 추가하다
저는 두 개의 기존 사전을 가지고 있는데, 그 중 하나를 다른 것에 '추가'하고 싶습니다.즉, 다른 사전의 키와 값을 첫 번째 사전으로 만들어야 한다는 것입니다.예를 들어 다음과 같습니다.
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
loop(아마?)입니다만, 이 작업을 저장할 수 있는 사전이나 다른 모듈이 있습니까?제가 쓰고 있는 사전은 정말 커서...
할수있습니다
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}
한 사전을 다른 사전에 추가하는 방법은 두 가지가 있습니다.
업데이트(수정)orig
제자리)
orig.update(extra) # Python 2.7+
orig |= extra # Python 3.9+
병합(새 사전 만들기)
# Python 2.7+
dest = collections.ChainMap(orig, extra)
dest = {k: v for d in (orig, extra) for (k, v) in d.items()}
# Python 3
dest = {**orig, **extra}
dest = {**orig, 'D': 4, 'E': 5}
# Python 3.9+
dest = orig | extra
이러한 조작은 교환적이지 않습니다.어느 경우든 후자가 승자입니다.예.
orig = {'A': 1, 'B': 2} extra = {'A': 3, 'C': 3} dest = orig | extra # dest = {'A': 3, 'B': 2, 'C': 3} dest = extra | orig # dest = {'A': 1, 'B': 2, 'C': 3}
또한 Python 3.7(및 CPython 3.6)에서만 사용 가능
dict
가 정렬되어 있습니다.따라서 이전 버전에서는 사전의 항목 순서가 다를 수 있습니다.
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}
변경을 원하지 않는 경우orig
다른 답변과 마찬가지로 복사 및 업데이트를 수행하거나 두 사전의 모든 항목을 dict 컨스트럭터에 전달하여 한 번에 새 사전을 만들 수 있습니다.
from itertools import chain
dest = dict(chain(orig.items(), extra.items()))
또는 반복 툴이 없는 경우:
dest = dict(list(orig.items()) + list(extra.items()))
다음 결과만 통과하면 됩니다.items()
안으로list()
Python 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)))
두 사전을 결합하거나 병합하는 세 줄 줄:
dest = {}
dest.update(orig)
dest.update(extra)
그러면 새 사전이 생성됩니다.dest
수정하지 않고orig
그리고.extra
.
주의: 키의 값이 다른 경우orig
그리고.extra
,그리고나서extra
오버라이드orig
.
.update() 메서드가 있습니다. : )
업데이트([기타])다른 키/값 쌍으로 사전을 업데이트하여 기존 키를 덮어씁니다.반환 없음.
update()는 다른 사전 객체 또는 키/값 쌍의 반복 가능(tuples 또는 길이 2의 다른 반복 가능) 중 하나를 받아들입니다.키워드 인수를 지정하면 사전이 d.update(red=1, blue=2)와 같은 키/값 쌍으로 업데이트됩니다.
버전 2.4에서 변경됨: 인수를 키/값 쌍 및 허용된 키워드 인수로 반복할 수 있습니다.
제가 드리고 싶은 대답은 "컬렉션 사용"입니다.ChainMap"은 Python 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은 메모리를 거의 사용하지 않으며 나중에 서브맵에 대한 수정도 볼 수 있습니다.순서는 중요하기 때문에 체인을 사용하여 기본값(예를 들어 user prefs > config > env)을 레이어할 수도 있습니다.
언급URL : https://stackoverflow.com/questions/8930915/append-a-dictionary-to-a-dictionary
'IT' 카테고리의 다른 글
OS X의 mariadb 도커 컨테이너: 데이터베이스 디렉토리를 작성할 수 없습니다. (0) | 2022.11.18 |
---|---|
날짜/시간을 밀리초의 문자열로 포맷합니다. (0) | 2022.11.18 |
HTTP에서 PUT, DELETE HTTP 요청을 보내는 방법URL 연결? (0) | 2022.11.18 |
router-link에서 부모 v-on을 소비하는 방법: complete clicked (0) | 2022.11.18 |
여러 TIMESTAMP 컬럼이 있는1개의 Mysql 테이블 (0) | 2022.11.17 |