사전 병합 값 추가
게임 데이터를 요약할 때 일부 데이터는 매일 사전에 저장됩니다. 여러 날을 요약하려면 사전을 병합해야 합니다.
키가 동일하면 해당 값이 추가됩니다.
업데이트 방법을 사용하면 같은 키의 값이 추가되지 않고 덮어쓰기가 되기 때문에 업데이트 방법을 사용할 수 없습니다.
천 마디 말은 1야드의 가치가 있습니다.
def union_dict(*objs): _keys = set(sum([obj.keys() for obj in objs],[])) _total = {} for _key in _keys: _total[_key] = sum([obj.get(_key,0) for obj in objs]) return _total obj1 = {'a':1,'b':2,'c':3} obj2 = {'a':1,'b':3,'d':4} print union_dict(obj1,obj2)
출력
{'a': 2, 'c': 3, 'b': 5, 'd': 4}
sum( [obj.keys() for obj in objs],[]) 이 문장은 이해하기 쉽지 않을 수 있습니다.
실제로 sum() 함수에도 "잘 알려지지 않은 매개변수", 즉 두 번째 매개변수인 시작 매개변수가 있으며 기본값은 0입니다.
int 유형일 수 있을 뿐만 아니라 []와 같이 + 연산자를 지원하는 다른 유형일 수도 있습니다.
이를 사용하면 2레벨 배열을 1레벨로 병합할 수 있습니다.
예를 들어
>>sum([[1,2,3],[4,5]],[]) [1,2,3,4,5]
Dictionary diff("XOR")
게임에서는 모니터를 원해요 아이템 시스템에 배낭 변경 사항을 기록합니다. ("XOR"의 결과는 같은 것은 탈락하고 다른 것은 남는 것, 즉 변경되는 것이다.)
백팩의 수납 구조는 이렇다고 가정하자.
은(는) {항목 ID: 수량} 사전입니다.
backpack 클래스 초기화 시, 배낭 아이템 정보를 oldbag 변수에 복사하여 저장합니다. 아이템 작업(아이템 사용, 아이템 보상 받기 등)을 수행한 후 save() 메소드를 호출하여 저장합니다. redis, new bag 사전과 oldbag 사전의 차이점을 비교하여 변경 사항을 확인하세요.
천 마디 말은 1야드의 가치가 있습니다.
def symmetric_difference(_oldobj,_newobj): _oldkeys = _oldobj.keys() _newkeys = _newobj.keys() _diff = {} for _key in set(_oldkeys + _newkeys): _val = _newobj.get(_key,0) - _oldobj.get(_key,0) if _val: _diff[_key] = _val return _diff oldobj = {'a':1,'b':2,'c':3} newobj = {'a':1,'b':3,'d':4} print symmetric_difference(oldobj,newobj)
Output
{'b': 1, 'd': 4,'c': -3}
는 플레이어가 1을 얻었음을 의미합니다. 'b' 항목, 4개의 'd' 항목, 3개의 'c' 항목이 손실되었습니다.
Python 사전의 병합된 값의 덧셈과 XOR 비교에 관한 더 많은 글은 PHP 중국어 홈페이지를 주목해주세요!