ホームページ >バックエンド開発 >Python チュートリアル >Pythonでの辞書の結合値の加算とXOR比較

Pythonでの辞書の結合値の加算とXOR比較

高洛峰
高洛峰オリジナル
2017-03-03 15:18:261739ブラウズ

辞書結合値の追加

ゲームデータを統計的に集計する場合、毎日いくつかのデータが辞書に保存されます。複数日を集計したい場合は、辞書を結合する必要があります。
キーが同じ場合、その値が加算されます。
update メソッドを使用すると、同じキーの値が追加されずに上書きされるため、update メソッドは使用できません。
千の言葉は一ヤードの価値があります。この文は理解しにくいかもしれません。
実際、sum() 関数には「あまり知られていないパラメーター」もあります。つまり、2 番目のパラメーターである開始パラメーターであり、デフォルトは 0 です。

また、int 型だけでなく、[] などの + 演算子をサポートする他のものも使用できます。

これを使用すると、2 層の配列を 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)

Dictionary diff("XOR")

ゲーム内で、アイテムシステムのバックパックの変化を監視したいと考えています。 (「XOR」の結果、同じものは排除され、残ったものは異なるもの、つまり変更されます)

バックパックの収納構造がこんな感じだとします。
は辞書、{item id:quantity}です。
バックパッククラスを初期化するとき、いくつかのアイテム操作(アイテムの使用、アイテム報酬の受け取りなど)を実行した後、save()メソッドを呼び出してredisに保存するときに、バックパックアイテム情報をoldbag変数にコピーして保存します。 the new Bag 辞書と oldbag 辞書の違いを比較して、変更点を取得します。
千の言葉は一ヤードの価値があります。

{'a': 2, 'c': 3, 'b': 5, 'd': 4}

Output


>>sum([[1,2,3],[4,5]],[])
[1,2,3,4,5]



は、プレイヤーが「b」アイテムを 1 つ、「d」アイテムを 4 つ取得し、「c」アイテムを 3 つ失ったことを意味します。

Python での辞書の結合値の加算と XOR 比較に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。