舉例講解Python中字典的合并值相加與異或?qū)Ρ?/h1>
更新時(shí)間:2016年06月04日 11:31:30 作者:mattkang
這里我們來舉例講解Python中字典的合并值相加與異或?qū)Ρ?以不同的字典為對(duì)象來進(jìn)行操作,,需要的朋友可以參考下
字典合并值相加
在統(tǒng)計(jì)匯總游戲數(shù)據(jù)的時(shí)候,有些數(shù)據(jù)是是每天用字典存的,當(dāng)我要對(duì)多天匯總的時(shí)候,就需要合并字典了。
如果key相同的話它們的值就相加。
不能用update方法,因?yàn)橛胾pdate方法則相同的key的值會(huì)覆蓋,而不是相加。
千言不如一碼。
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],[])這句可能不太好理解。
其實(shí)sum()函數(shù)也有"鮮為人知的參數(shù)",即第2個(gè)參數(shù),start參數(shù),默認(rèn)是0。
而且不止可以是int類型,還可以是其他支持+操作符的東西,比如[]。
利用這一點(diǎn),可以對(duì)二層數(shù)組打平成一層。
比如
>>sum([[1,2,3],[4,5]],[])
[1,2,3,4,5]
對(duì)字典diff("異或")
在游戲中,我要監(jiān)控記錄物品系統(tǒng)中的背包變動(dòng)情況。("異或"的結(jié)果是相同的消除,剩下不同的,即變動(dòng)的)
假設(shè)背包的存儲(chǔ)結(jié)構(gòu)是這樣的。
是一個(gè)字典,{物品id:數(shù)量}。
在背包類初始化的時(shí)候,把背包物品信息copy保存到一個(gè)oldbag變量,進(jìn)行一些物品操作后(比如使用物品,領(lǐng)取物品獎(jiǎng)勵(lì)等),在調(diào)用save()方法存進(jìn)redis時(shí),對(duì)新的bag字典與oldbag字典進(jìn)行差異對(duì)比就得出變動(dòng)情況了。
千言不如一碼。
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}
代表玩家得到了1個(gè)'b'物品,4個(gè)'d'物品,失去了3個(gè)'c'物品。
您可能感興趣的文章:- Python將多個(gè)excel文件合并為一個(gè)文件
- Python將多個(gè)excel表格合并為一個(gè)表格
- Python文件操作之合并文本文件內(nèi)容示例代碼
- python字典DICT類型合并詳解
- Python中字典(dict)合并的四種方法總結(jié)
- Python中如何優(yōu)雅的合并兩個(gè)字典(dict)方法示例
- python 數(shù)據(jù)清洗之?dāng)?shù)據(jù)合并、轉(zhuǎn)換、過濾、排序
- Python合并字典鍵值并去除重復(fù)元素的實(shí)例
- Python編寫簡(jiǎn)單的HTML頁面合并腳本
- python合并同類型excel表格的方法
相關(guān)文章
-
Python如何根據(jù)時(shí)間序列數(shù)據(jù)作圖
這篇文章主要介紹了Python如何根據(jù)時(shí)間序列數(shù)據(jù)作圖,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下 2020-05-05
-
Python數(shù)據(jù)處理之pd.Series()函數(shù)的基本使用
Series是帶標(biāo)簽的一維數(shù)組,可存儲(chǔ)整數(shù)、浮點(diǎn)數(shù)、字符串、Python 對(duì)象等類型的數(shù)據(jù),軸標(biāo)簽統(tǒng)稱為索引,下面這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)處理之pd.Series()函數(shù)的基本使用,需要的朋友可以參考下 2022-06-06
-
使用Python3?Boto3包刪除AWS?CloudFormation的棧(Stacks)
這篇文章主要介紹了如何使用Python3?Boto3刪除AWS?CloudFormation的棧(Stacks),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下 2024-01-01
-
Django博客系統(tǒng)注冊(cè)之創(chuàng)建用戶模塊應(yīng)用
本文主要介紹了Django博客系統(tǒng)注冊(cè)之創(chuàng)建用戶模塊應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下 2021-09-09
最新評(píng)論
字典合并值相加
在統(tǒng)計(jì)匯總游戲數(shù)據(jù)的時(shí)候,有些數(shù)據(jù)是是每天用字典存的,當(dāng)我要對(duì)多天匯總的時(shí)候,就需要合并字典了。
如果key相同的話它們的值就相加。
不能用update方法,因?yàn)橛胾pdate方法則相同的key的值會(huì)覆蓋,而不是相加。
千言不如一碼。
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],[])這句可能不太好理解。
其實(shí)sum()函數(shù)也有"鮮為人知的參數(shù)",即第2個(gè)參數(shù),start參數(shù),默認(rèn)是0。
而且不止可以是int類型,還可以是其他支持+操作符的東西,比如[]。
利用這一點(diǎn),可以對(duì)二層數(shù)組打平成一層。
比如
>>sum([[1,2,3],[4,5]],[]) [1,2,3,4,5]
對(duì)字典diff("異或")
在游戲中,我要監(jiān)控記錄物品系統(tǒng)中的背包變動(dòng)情況。("異或"的結(jié)果是相同的消除,剩下不同的,即變動(dòng)的)
假設(shè)背包的存儲(chǔ)結(jié)構(gòu)是這樣的。
是一個(gè)字典,{物品id:數(shù)量}。
在背包類初始化的時(shí)候,把背包物品信息copy保存到一個(gè)oldbag變量,進(jìn)行一些物品操作后(比如使用物品,領(lǐng)取物品獎(jiǎng)勵(lì)等),在調(diào)用save()方法存進(jìn)redis時(shí),對(duì)新的bag字典與oldbag字典進(jìn)行差異對(duì)比就得出變動(dòng)情況了。
千言不如一碼。
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}
代表玩家得到了1個(gè)'b'物品,4個(gè)'d'物品,失去了3個(gè)'c'物品。
- Python將多個(gè)excel文件合并為一個(gè)文件
- Python將多個(gè)excel表格合并為一個(gè)表格
- Python文件操作之合并文本文件內(nèi)容示例代碼
- python字典DICT類型合并詳解
- Python中字典(dict)合并的四種方法總結(jié)
- Python中如何優(yōu)雅的合并兩個(gè)字典(dict)方法示例
- python 數(shù)據(jù)清洗之?dāng)?shù)據(jù)合并、轉(zhuǎn)換、過濾、排序
- Python合并字典鍵值并去除重復(fù)元素的實(shí)例
- Python編寫簡(jiǎn)單的HTML頁面合并腳本
- python合并同類型excel表格的方法
相關(guān)文章
Python如何根據(jù)時(shí)間序列數(shù)據(jù)作圖
這篇文章主要介紹了Python如何根據(jù)時(shí)間序列數(shù)據(jù)作圖,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
Python數(shù)據(jù)處理之pd.Series()函數(shù)的基本使用
Series是帶標(biāo)簽的一維數(shù)組,可存儲(chǔ)整數(shù)、浮點(diǎn)數(shù)、字符串、Python 對(duì)象等類型的數(shù)據(jù),軸標(biāo)簽統(tǒng)稱為索引,下面這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)處理之pd.Series()函數(shù)的基本使用,需要的朋友可以參考下2022-06-06
使用Python3?Boto3包刪除AWS?CloudFormation的棧(Stacks)
這篇文章主要介紹了如何使用Python3?Boto3刪除AWS?CloudFormation的棧(Stacks),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-01-01
Django博客系統(tǒng)注冊(cè)之創(chuàng)建用戶模塊應(yīng)用
本文主要介紹了Django博客系統(tǒng)注冊(cè)之創(chuàng)建用戶模塊應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09

