舉例講解Python中字典的合并值相加與異或?qū)Ρ?/h1>
更新時間:2016年06月04日 11:31:30 作者:mattkang
這里我們來舉例講解Python中字典的合并值相加與異或?qū)Ρ?以不同的字典為對象來進行操作,,需要的朋友可以參考下
字典合并值相加
在統(tǒng)計匯總游戲數(shù)據(jù)的時候,有些數(shù)據(jù)是是每天用字典存的,當(dāng)我要對多天匯總的時候,就需要合并字典了。
如果key相同的話它們的值就相加。
不能用update方法,因為用update方法則相同的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()函數(shù)也有"鮮為人知的參數(shù)",即第2個參數(shù),start參數(shù),默認(rèn)是0。
而且不止可以是int類型,還可以是其他支持+操作符的東西,比如[]。
利用這一點,可以對二層數(shù)組打平成一層。
比如
>>sum([[1,2,3],[4,5]],[])
[1,2,3,4,5]
對字典diff("異或")
在游戲中,我要監(jiān)控記錄物品系統(tǒng)中的背包變動情況。("異或"的結(jié)果是相同的消除,剩下不同的,即變動的)
假設(shè)背包的存儲結(jié)構(gòu)是這樣的。
是一個字典,{物品id:數(shù)量}。
在背包類初始化的時候,把背包物品信息copy保存到一個oldbag變量,進行一些物品操作后(比如使用物品,領(lǐng)取物品獎勵等),在調(diào)用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}
代表玩家得到了1個'b'物品,4個'd'物品,失去了3個'c'物品。
相關(guān)文章
-
Pandas數(shù)值排序 sort_values()的使用
本文主要介紹了Pandas數(shù)值排序 sort_values()的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧 2022-07-07
-
Python 中使用 Selenium 單擊網(wǎng)頁按鈕功能
Selenium是一個用于測試網(wǎng)站的自動化測試工具,支持各種瀏覽器包括Chrome、Firefox、Safari等主流界面瀏覽器,同時也支持phantomJS無界面瀏覽器,本篇文章將介紹如何在 Python 中使用 selenium 單擊網(wǎng)頁上的按鈕,感興趣的朋友一起看看吧 2023-11-11
-
如何使用VSCode愉快的寫Python于調(diào)試配置步驟
從我的使用經(jīng)驗出發(fā),可以說VSCode用來寫Python真的是再合適不過了,你將體驗到絲滑的編程體驗和無限擴展的可能。而且,如果你的項目是包含多種語言的,比如Web開發(fā),你不必再開多個編輯器和其他工具,因為這一切都可以在VSCode里完成了 2018-04-04
-
基于python3實現(xiàn)socket文件傳輸和校驗
這篇文章主要為大家詳細(xì)介紹了基于python3實現(xiàn)socket文件傳輸和校驗,具有一定的參考價值,感興趣的小伙伴們可以參考一下 2018-07-07
-
Python創(chuàng)建多線程的兩種常用方法總結(jié)
這篇文章主要為大家詳細(xì)介紹了Python中創(chuàng)建多線程的兩種常用方法,文中的示例代碼簡潔易懂,對我們掌握Python有一定的幫助,需要的可以收藏一下 2023-05-05
-
Python調(diào)用ChatGPT制作基于Tkinter的桌面時鐘
這篇文章主要為大家詳細(xì)介紹了Python如何調(diào)用ChatGPT制作基于Tkinter的桌面時鐘,文中的示例代碼講解詳細(xì),感興趣的可以了解一下 2023-03-03
-
Django配置Bootstrap, js實現(xiàn)過程詳解
這篇文章主要介紹了Django配置Bootstrap, js實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下 2020-10-10
最新評論
字典合并值相加
在統(tǒng)計匯總游戲數(shù)據(jù)的時候,有些數(shù)據(jù)是是每天用字典存的,當(dāng)我要對多天匯總的時候,就需要合并字典了。
如果key相同的話它們的值就相加。
不能用update方法,因為用update方法則相同的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()函數(shù)也有"鮮為人知的參數(shù)",即第2個參數(shù),start參數(shù),默認(rèn)是0。
而且不止可以是int類型,還可以是其他支持+操作符的東西,比如[]。
利用這一點,可以對二層數(shù)組打平成一層。
比如
>>sum([[1,2,3],[4,5]],[]) [1,2,3,4,5]
對字典diff("異或")
在游戲中,我要監(jiān)控記錄物品系統(tǒng)中的背包變動情況。("異或"的結(jié)果是相同的消除,剩下不同的,即變動的)
假設(shè)背包的存儲結(jié)構(gòu)是這樣的。
是一個字典,{物品id:數(shù)量}。
在背包類初始化的時候,把背包物品信息copy保存到一個oldbag變量,進行一些物品操作后(比如使用物品,領(lǐng)取物品獎勵等),在調(diào)用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}
代表玩家得到了1個'b'物品,4個'd'物品,失去了3個'c'物品。
相關(guān)文章
Pandas數(shù)值排序 sort_values()的使用
本文主要介紹了Pandas數(shù)值排序 sort_values()的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Python 中使用 Selenium 單擊網(wǎng)頁按鈕功能
Selenium是一個用于測試網(wǎng)站的自動化測試工具,支持各種瀏覽器包括Chrome、Firefox、Safari等主流界面瀏覽器,同時也支持phantomJS無界面瀏覽器,本篇文章將介紹如何在 Python 中使用 selenium 單擊網(wǎng)頁上的按鈕,感興趣的朋友一起看看吧2023-11-11如何使用VSCode愉快的寫Python于調(diào)試配置步驟
從我的使用經(jīng)驗出發(fā),可以說VSCode用來寫Python真的是再合適不過了,你將體驗到絲滑的編程體驗和無限擴展的可能。而且,如果你的項目是包含多種語言的,比如Web開發(fā),你不必再開多個編輯器和其他工具,因為這一切都可以在VSCode里完成了2018-04-04基于python3實現(xiàn)socket文件傳輸和校驗
這篇文章主要為大家詳細(xì)介紹了基于python3實現(xiàn)socket文件傳輸和校驗,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07Python創(chuàng)建多線程的兩種常用方法總結(jié)
這篇文章主要為大家詳細(xì)介紹了Python中創(chuàng)建多線程的兩種常用方法,文中的示例代碼簡潔易懂,對我們掌握Python有一定的幫助,需要的可以收藏一下2023-05-05Python調(diào)用ChatGPT制作基于Tkinter的桌面時鐘
這篇文章主要為大家詳細(xì)介紹了Python如何調(diào)用ChatGPT制作基于Tkinter的桌面時鐘,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-03-03Django配置Bootstrap, js實現(xiàn)過程詳解
這篇文章主要介紹了Django配置Bootstrap, js實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10