舉例講解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頁(yè)面合并腳本
- python合并同類型excel表格的方法
相關(guān)文章
-
Pandas數(shù)值排序 sort_values()的使用
本文主要介紹了Pandas數(shù)值排序 sort_values()的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧 2022-07-07
-
Python 中使用 Selenium 單擊網(wǎng)頁(yè)按鈕功能
Selenium是一個(gè)用于測(cè)試網(wǎng)站的自動(dòng)化測(cè)試工具,支持各種瀏覽器包括Chrome、Firefox、Safari等主流界面瀏覽器,同時(shí)也支持phantomJS無界面瀏覽器,本篇文章將介紹如何在 Python 中使用 selenium 單擊網(wǎng)頁(yè)上的按鈕,感興趣的朋友一起看看吧 2023-11-11
-
如何使用VSCode愉快的寫Python于調(diào)試配置步驟
從我的使用經(jīng)驗(yàn)出發(fā),可以說VSCode用來寫Python真的是再合適不過了,你將體驗(yàn)到絲滑的編程體驗(yàn)和無限擴(kuò)展的可能。而且,如果你的項(xiàng)目是包含多種語言的,比如Web開發(fā),你不必再開多個(gè)編輯器和其他工具,因?yàn)檫@一切都可以在VSCode里完成了 2018-04-04
-
基于python3實(shí)現(xiàn)socket文件傳輸和校驗(yàn)
這篇文章主要為大家詳細(xì)介紹了基于python3實(shí)現(xiàn)socket文件傳輸和校驗(yàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下 2018-07-07
-
python逆向微信指數(shù)爬取實(shí)現(xiàn)步驟
這篇文章主要為大家介紹了python逆向微信指數(shù)爬取的實(shí)現(xiàn)步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪 2022-02-02
-
Python創(chuàng)建多線程的兩種常用方法總結(jié)
這篇文章主要為大家詳細(xì)介紹了Python中創(chuàng)建多線程的兩種常用方法,文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們掌握Python有一定的幫助,需要的可以收藏一下 2023-05-05
-
Python調(diào)用ChatGPT制作基于Tkinter的桌面時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了Python如何調(diào)用ChatGPT制作基于Tkinter的桌面時(shí)鐘,文中的示例代碼講解詳細(xì),感興趣的可以了解一下 2023-03-03
-
Django配置Bootstrap, js實(shí)現(xiàn)過程詳解
這篇文章主要介紹了Django配置Bootstrap, js實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下 2020-10-10
最新評(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頁(yè)面合并腳本
- python合并同類型excel表格的方法
相關(guān)文章
Pandas數(shù)值排序 sort_values()的使用
本文主要介紹了Pandas數(shù)值排序 sort_values()的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Python 中使用 Selenium 單擊網(wǎng)頁(yè)按鈕功能
Selenium是一個(gè)用于測(cè)試網(wǎng)站的自動(dòng)化測(cè)試工具,支持各種瀏覽器包括Chrome、Firefox、Safari等主流界面瀏覽器,同時(shí)也支持phantomJS無界面瀏覽器,本篇文章將介紹如何在 Python 中使用 selenium 單擊網(wǎng)頁(yè)上的按鈕,感興趣的朋友一起看看吧2023-11-11如何使用VSCode愉快的寫Python于調(diào)試配置步驟
從我的使用經(jīng)驗(yàn)出發(fā),可以說VSCode用來寫Python真的是再合適不過了,你將體驗(yàn)到絲滑的編程體驗(yàn)和無限擴(kuò)展的可能。而且,如果你的項(xiàng)目是包含多種語言的,比如Web開發(fā),你不必再開多個(gè)編輯器和其他工具,因?yàn)檫@一切都可以在VSCode里完成了2018-04-04基于python3實(shí)現(xiàn)socket文件傳輸和校驗(yàn)
這篇文章主要為大家詳細(xì)介紹了基于python3實(shí)現(xiàn)socket文件傳輸和校驗(yàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07python逆向微信指數(shù)爬取實(shí)現(xiàn)步驟
這篇文章主要為大家介紹了python逆向微信指數(shù)爬取的實(shí)現(xiàn)步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-02-02Python創(chuàng)建多線程的兩種常用方法總結(jié)
這篇文章主要為大家詳細(xì)介紹了Python中創(chuàng)建多線程的兩種常用方法,文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們掌握Python有一定的幫助,需要的可以收藏一下2023-05-05Python調(diào)用ChatGPT制作基于Tkinter的桌面時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了Python如何調(diào)用ChatGPT制作基于Tkinter的桌面時(shí)鐘,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-03-03Django配置Bootstrap, js實(shí)現(xiàn)過程詳解
這篇文章主要介紹了Django配置Bootstrap, js實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10