두 개의 사전을 하나의 (새로운) 사전에 넣으려고합니다.하지만 계속 문제가 있습니다.사전 두 개를 하나에 넣으십시오
이def combine_report(r1, r2):
to_merge=[r1,r2]
d={}
for m in to_merge:
for k,v in m.items():
d.setdefault(k,{}).update(v)
return d
두 개의 사전을 하나의 (새로운) 사전에 넣으려고합니다.하지만 계속 문제가 있습니다.사전 두 개를 하나에 넣으십시오
이def combine_report(r1, r2):
to_merge=[r1,r2]
d={}
for m in to_merge:
for k,v in m.items():
d.setdefault(k,{}).update(v)
return d
당신은 d
에 직접 .update()
를 사용해야합니다 :
def combine_report(r1, r2):
d = r1.copy()
d.update(r2)
return d
내 기능에서 R1과 R2를 정의하기 때문에
'NoneType' object is not iterable
것은 이해가되지 않습니다 :이 오류 메시지가
빈 사전에 키를 설정하려고 시도한 다음 그 값만 가진 사람들에 대해 .update()
을 호출했습니다. 이 값은 반복 가능이어야합니다.; 값 잊어 버려 경우 None
그 특정 예외로 이어질 것 :
>>> {}.update(None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not iterable
버전이 간단한 항목 할당을 사용하여 '수리'할 수있다 : 내 버전에 표시된 것처럼
def combine_report(r1, r2):
to_merge = [r1, r2]
d={}
for m in to_merge:
for k, v in m.items():
d[k] = v
return d
을하지만 .update()
를 사용하여 더 효율적으로 될 것입니다. 당신은 키 당 목록에 보존 모든 값을 가지고있는 경우
, 다음 사용 k
는 기본 값이 아직 존재 세트를하는 경우 여기에
def combine_report(r1, r2):
d = {}
for m in to_merge:
for k, v in m.items():
d.setdefault(k, []).append(v)
return d
이 dict.setdefault()
키 k
에 대한 값을 반환하지만 것 (여기 목록). 당신은 단지 값으로 사전을 업데이트하기 위해 노력하고 있기 때문에 대신
d.setdefault(k,{}).update(v)
의
'업데이트'가 사전 이해보다 효율적입니까? – thefourtheye
@thefourtheye : 나는 그렇게 기대한다. C 코드는 기존 사전 구조를 재사용 할 수 있으며 C의 루프는 언제든지 Python의 루프를 이깁니다. –
당신은 comprehensions가 C가 아닌 Python으로 구현된다는 것을 의미합니까? – thefourtheye
당신은
d.setdefault(k,[]).append(v)
으로 가야한다. 실제로 필요한 것은 키에 해당하는 값 목록입니다. 따라서, 전체 프로그램이
def combine_report(r1, r2):
to_merge, d = [r1,r2], {}
for m in to_merge:
for k,v in m.items():
d.setdefault(k,[]).append(v)
return d
print(combine_report({"1":"a"}, {"1":"b"}))
출력
{'1': ['a', 'b']}
하나의 키에 대해 동일한 값을 갖고 있어도 결합됩니까? 어떤 값을 대체하고 싶지 않습니다. 하나의 보고서가 { '1': 'a'}이고 다른 보고서가 { '1': 'b'}이면 { '1': 'a', b}} – user2976821
@ user2976821 업데이트 된 답변. 예상대로 작동합니다. – thefourtheye
감사합니다. setdefualt.() 함수는 무엇을합니까? – user2976821
처럼되고이 입력으로 사용하는 사전은 무엇입니까? –