例を挙げてPythonの辞書の結合値を説明します。

1964 ワード

辞書マージ値の加算
ゲームのデータを集計してまとめると、毎日辞書で保存しているデータがあります。何日間にまとめたいなら、辞書を統合する必要があります。
keyが同じなら、その値は加算されます。
udateの方法は使えません。udateの方法では同じkeyの値が上書きされますので、足し算ではありません。
千言は一ヤードに及ばない。

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()関数にも「人に知られていないパラメータ」があります。つまり2番目のパラメータ、startパラメータ、デフォルトは0です。
なお、intタイプだけでなく、他のサポート+操作子のものであっても良いです。例えば[]。
この点を利用して、二層配列をフラットにすることができます。
たとえば

>>sum([[1,2,3],[4,5]],[])
[1,2,3,4,5]
辞書にdiff(「異議」)
ゲームの中で、アイテムシステムのリュックサックの変動状況を監視します。異同の結果は同じ除去で、残りは違っています。すなわち変動のです。
リュックサックの記憶構造はこのようなものとする。
は辞書です。
リュックサック類の初期化の時に、リュックサックの物品情報copyを一つのoldbag変数に保存して、いくつかの物品の操作を行った後(例えば物品を使って、物品の奨励などを受け取ります)、save()の方法を呼び出してredisに保存する時、新しいbag辞書とoldbag辞書の違いを比較して変動状況を得ました。
千言は一ヤードに及ばない。

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) 
出力

{'b': 1, 'd': 4,'c': -3}
代表プレイヤーは'b'のアイテムを1つ、'd'のアイテムを4つ、'c'のアイテムを3つ失った。