programing

Python에서 dict 객체의 결합

newsource 2023. 1. 30. 22:00

Python에서 dict 객체의 결합

두 개의 합을 어떻게 계산합니까?dictPython의 객체(여기서(key, value)결과 iff에 쌍이 존재합니다.keyindict(복사하지 않는 한) 중 어느 쪽입니까?

예를 들어, 의 결합은{'a' : 0, 'b' : 1}그리고.{'c' : 2}{'a' : 0, 'b' : 1, 'c' : 2}.

어떤 입력도 수정하지 않고 이 작업을 수행할 수 있는 것이 좋습니다.dict. 이것이 유용한 예: 현재 범위 내의 모든 변수와 그 값의 dict를 가져옵니다.

질문은 관용어를 제공한다.dits 중 하나를 키워드 인수로 사용하여dict()컨스트럭터:

dict(y, **x)

중복은 다음 값을 위해 해결됩니다.x예를 들어,

dict({'a' : 'y[a]'}, **{'a', 'x[a]'}) == {'a' : 'x[a]'}

다음과 같은 받아쓰기 방법을 사용할 수도 있습니다.

a = {'a' : 0, 'b' : 1}
b = {'c' : 2}

a.update(b)
print a

정적 사전의 경우, 다른 딕트의 스냅샷을 결합합니다.

Python 3.9에서는 바이너리 "or" 연산자가|는 사전을 연결하도록 정의되어 있습니다.(구체적인 새로운 사전이 열심히 작성되었습니다.)

>>> a = {"a":1}
>>> b = {"b":2}
>>> a|b
{'a': 1, 'b': 2}

반대로,|=확장 할당이 구현되어 있는 것은 Calling과 같은 의미입니다.update방법:

>>> a = {"a":1}
>>> a |= {"b": 2}
>>> a
{'a': 1, 'b': 2}

상세한 것에 대하여는, PEP-584 를 참조해 주세요.

Python 3.9 이전에 새로운 사전을 만드는 더 간단한 방법은 "star expansion"을 사용하여 새로운 사전을 만들고 각 서브사전의 내용을 추가하는 것입니다.

c = {**a, **b}

동적 사전 조합의 경우 결합된 라이브 딕트:

두 개의 dict가 모두 독립적이고 업데이트 가능한 상태로 유지되어야 하는 경우 두 개의 사전을 모두 쿼리하는 단일 개체를 만들 수 있습니다.__getitem__방법(및 구현)get,__contains__기타 필요한 매핑 방법을 지정합니다).

미니멀리즘의 예는 다음과 같습니다.

class UDict(object):
   def __init__(self, d1, d2):
       self.d1, self.d2 = d1, d2
   def __getitem__(self, item):
       if item in self.d1:
           return self.d1[item]
       return self.d2[item]

효과가 있습니다.

>>> a = UDict({1:1}, {2:2})
>>> a[2]
2
>>> a[1]
1
>>> a[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 7, in __getitem__
KeyError: 3
>>> 

NB: 두 개 이상의 사전의 Union "뷰"를 느긋하게 유지하려면 표준 라이브러리를 체크하십시오. 이는 위의 예에서는 고려되지 않은 사전 메서드와 코너 케이스가 모두 포함되어 있기 때문입니다.

두 개의 사전

def union2(dict1, dict2):
    return dict(list(dict1.items()) + list(dict2.items()))

n 사전

def union(*dicts):
    return dict(itertools.chain.from_iterable(dct.items() for dct in dicts))

언급URL : https://stackoverflow.com/questions/9819602/union-of-dict-objects-in-python