복붙노트

[PYTHON] "파이썬에 사전 추가하기" [복제]

PYTHON

"파이썬에 사전 추가하기" [복제]

제 입력은 문자열 키와 정수 값을 갖는 두 개의 사전입니다. 두 개의 사전을 추가하여 결과에 입력 사전의 모든 키가 있고 값이 입력 사전의 값의 합계가되도록합니다.

명확성을 위해 입력 중 하나에만 키가 나타나면 해당 키 / 값이 결과에 나타나고 키가 두 사전에 나타나면 값의 합계가 결과에 나타납니다.

예를 들어, 내 입력 내용은 다음과 같습니다.

a = dict()
a['cat'] = 1
a['fish'] = 10
a['aardvark'] = 1000

b = dict()
b['cat'] = 2
b['dog'] = 200
b['aardvark'] = 2000

나는 그 결과를 원한다.

{'cat': 3, 'fish': 10, 'dog': 200, 'aardvark': 3000}

파이썬을 알면이 작업을 수행하는 데는 한 줄짜리 코드가 있어야합니다 (실제로 한 줄 일 필요는 없습니다 ...). 이견있는 사람?

해결법

  1. ==============================

    1.어떻게에 대한:

    어떻게에 대한:

    dict( [ (n, a.get(n, 0)+b.get(n, 0)) for n in set(a)|set(b) ] )
    

    또는 중간 목록을 만들지 않아도됩니다 (생성기가 충분 함).

    dict( (n, a.get(n, 0)+b.get(n, 0)) for n in set(a)|set(b) )
    

    스크립트 후 :

    주석가가 올바르게 해결 했으므로 새로운 (Py2.7의) 콜렉션에서 쉽게 구현할 수있는 방법이 있습니다. 클래스. 내가 기억하는만큼,이 버전은 내가 대답을 썼을 때 사용할 수 없었다 :

    from collections import Counter
    dict(Counter(a)+Counter(b))
    
  2. ==============================

    2.한 줄에 없지만 ...

    한 줄에 없지만 ...

    import itertools
    import collections
    a = dict()
    a['cat'] = 1
    a['fish'] = 10
    a['aardvark'] = 1000
    b = dict()
    b['cat'] = 2
    b['dog'] = 200
    b['aardvark'] = 2000
    c = collections.defaultdict(int)
    for k, v in itertools.chain(a.iteritems(), b.iteritems()):
        c[k] += v
    

    더 많은 수의 사전으로 쉽게 확장 할 수 있습니다.

  3. ==============================

    3.결과는 :

    결과는 :

    for elem in b:
        a[elem] = a.get(elem, 0) + b[elem]
    

    c :

    c = dict(a)
    for elem in b:
        c[elem] = a.get(elem, 0) + b[elem]
    
  4. ==============================

    4.하나의 라이너 (요청 된 정렬) : 키 목록 가져 오기, 추가, 중복 삭제, 목록 내포 결과에 대한 반복, 키가 두 dicts에 있으면 합계 (키, 값) 쌍을 반환하거나 그렇지 않은 경우 개별 값을 반환합니다. . dict에 랩핑하십시오.

    하나의 라이너 (요청 된 정렬) : 키 목록 가져 오기, 추가, 중복 삭제, 목록 내포 결과에 대한 반복, 키가 두 dicts에 있으면 합계 (키, 값) 쌍을 반환하거나 그렇지 않은 경우 개별 값을 반환합니다. . dict에 랩핑하십시오.

    >>> dict([(x,a[x]+b[x]) if (x in a and x in b) else (x,a[x]) if (x in a) else (x,b[x]) for x in set(a.keys()+b.keys())])
    {'aardvark': 3000, 'fish': 10, 'dog': 200, 'cat': 3}
    
  5. from https://stackoverflow.com/questions/1031199/adding-dictionaries-in-python by cc-by-sa and MIT license