[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.어떻게에 대한:
어떻게에 대한:
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.한 줄에 없지만 ...
한 줄에 없지만 ...
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.결과는 :
결과는 :
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.하나의 라이너 (요청 된 정렬) : 키 목록 가져 오기, 추가, 중복 삭제, 목록 내포 결과에 대한 반복, 키가 두 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}
from https://stackoverflow.com/questions/1031199/adding-dictionaries-in-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 줄 바꿈으로 구분 된 파일을 읽고 줄 바꿈을 삭제하는 가장 좋은 방법은 무엇입니까? (0) | 2018.11.12 |
---|---|
[PYTHON] Matplotlib : "scatter / dot / beeswarm"플롯에서 중첩되는 데이터 포인트 피하기 (0) | 2018.11.12 |
[PYTHON] numpy 배열의 모든 n 요소를 평균 (0) | 2018.11.12 |
[PYTHON] 및 / 또는 파이썬에서? (0) | 2018.11.12 |
[PYTHON] 파이썬 - 목록에서 마지막 x 요소를 추출하는 방법 (0) | 2018.11.12 |