>백엔드 개발 >파이썬 튜토리얼 >Python에서 사전 병합 값의 추가 및 XOR 비교

Python에서 사전 병합 값의 추가 및 XOR 비교

高洛峰
高洛峰원래의
2017-03-03 15:18:261740검색

사전 병합 값 추가

게임 데이터를 요약할 때 일부 데이터는 매일 사전에 저장됩니다. 여러 날을 요약하려면 사전을 병합해야 합니다.
키가 동일하면 해당 값이 추가됩니다.
업데이트 방법을 사용하면 같은 키의 값이 추가되지 않고 덮어쓰기가 되기 때문에 업데이트 방법을 사용할 수 없습니다.
천 마디 말은 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 중국어 홈페이지를 주목해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.