python 實(shí)現(xiàn)二維字典的鍵值合并等函數(shù)
這篇文章主要講python中關(guān)于字典的一些具體操作,講解的問題都是本人在實(shí)際編程中所遇到的問題,讀者可以根據(jù)自己所遇到的問題具體問題具體分析。
(1) 二維字典的鍵值合并:
先提供一個(gè)應(yīng)用場景:
假設(shè)我有兩個(gè)二維字典:
room1 = {orderid1:{roomid1:pred1,roomid2:pred2},orderid2:{roomid3:pred3,roomid4:pred4}} room2 = {orderid1:{roomid1:pred5,roomid2:pred6},orderid2:{roomid3:pred7,roomid4:pred8}}
這兩個(gè)字典的key相同,只有第二維的value不同,我的目的是把這兩個(gè)字典的value相加,得到的結(jié)果如下:
sum_room = {orderid1:{roomid1:pred1+pred5,roomid2:pred2+pred6},orderid2:{roomid3:pred3+pred7,roomid4:pred4+pred8}}
具體的實(shí)現(xiàn)代碼如下:(為了提高通用性,以下代碼創(chuàng)建了兩個(gè)簡單的字典obj3,obj4)
實(shí)現(xiàn)二維字典的鍵值合并,即將同個(gè)key下的value相加:
思路:先創(chuàng)建一個(gè)空字典all_room,將all_room與obj的value相加并賦給all_room:
from collections import defaultdict all_room = defaultdict(defaultdict) obj3 = {'a':{'aa':1,'aa1':2},'b':{'bb':2},'c':3} obj4 = {'a': {'aa': 5, 'aa1': 6}, 'b': {'bb': 7}, 'c': 8} def sum_value(obj): for key in obj: if type(obj[key]).__name__ == 'dict': if key not in all_room: all_room[key] = {} for subkey in obj[key]: if subkey not in all_room[key]: all_room[key][subkey] = 0 all_room[key][subkey] += obj[key][subkey] else: if key not in all_room: all_room[key] = 0 all_room[key] += obj[key] return all_room
看一下結(jié)果:
sum_value(obj3) Out[40]: defaultdict(collections.defaultdict, {'a': {'aa': 1, 'aa1': 2}, 'b': {'bb': 2}, 'c': 3}) sum_value(obj4) Out[41]: defaultdict(collections.defaultdict, {'a': {'aa': 6, 'aa1': 8}, 'b': {'bb': 9}, 'c': 11})
實(shí)現(xiàn)了文章開頭所述功能。
sum_value(obj)這個(gè)函數(shù)可以實(shí)現(xiàn)對多個(gè)二維字典的鍵值相加,只要?jiǎng)?chuàng)建一個(gè)for循環(huán)就行了。
(2)往字典的key里添加一個(gè)新的value:
同樣提供一個(gè)應(yīng)用場景:
dict1 = {'order1': ['room1', 'room1'],'order2': ['room3', 'room3']} dict2 = {'order1': 'room2', 'order2': 'room3'}
我的目的是想把dict2中key里的value添加進(jìn)dict1中相同的key里,理想結(jié)果如下:
dict1 = {'order1': ['room1', 'room1', 'room2'], 'order2': ['room3', 'room3', 'room3']}
下面給出實(shí)現(xiàn)代碼:
for key in dict1.keys(): a=[] b=[] b = dict1[key] for i in b: ##這一步很關(guān)鍵,目的是把dict1[key]的value值逐個(gè)取出存進(jìn)a,再把dict2[key]的value值存進(jìn)a里面,這樣可以避免dict1[key]出現(xiàn)多個(gè)list層 a.append(i) a.append(dict2[key]) ##dict2[key]必須保證只有一個(gè)元素 dict1[key] = a
結(jié)果如下:
dict1 Out[88]: {'order1': ['room1', 'room1', 'room2'], 'order2': ['room3', 'room3', 'room3']}
下一步,統(tǒng)計(jì)key中的value個(gè)數(shù):
from collections import Counter for key,item in dict1.items(): count[key] = Counter(item)
結(jié)果如下:
count Out[91]: {'order1': Counter({'room1': 2, 'room2': 1}), 'order2': Counter({'room3': 3})}
接著,取出每個(gè)外層key中里層value最大的key(比較拗口,即取出每個(gè)orderid中roomid的值最大的roomid):
(舉個(gè)例子,在order1中,room1的值為2,是最大值,所以我把room1賦給order1,即result1 = {'order1':'room1'})
result = {} for key,item in count.items(): result[key] = max(item,key=item.get)
結(jié)果如下:
result Out[94]: {'order1': 'room1', 'order2': 'room3'}
(3)字典的排序:sorted()函數(shù)
import operator dic = {(1, 2): 3, (1, 3): 4, (4, 5): 14} ##字典的key可以是元組; ds = sorted(dic.items(),key=operator.itemgetter(1),reverse=True) ##如果要升序排列,把reverse=True去掉即可; ds Out[21]: [((4, 5), 14), ((1, 3), 4), ((1, 2), 3)]
(4)字典中不允許出現(xiàn)一個(gè)鍵對應(yīng)多個(gè)值的情況,當(dāng)出現(xiàn)這種情況時(shí),取最后的鍵值對:
如:
>>> dict1 = {'foo':789, 'foo': 'xyz'} >>> dict1 結(jié)果:{'foo': 'xyz'}
以上這篇python 實(shí)現(xiàn)二維字典的鍵值合并等函數(shù)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- python實(shí)現(xiàn)字典合并的五種方法(附示例代碼)
- python合并兩個(gè)字典的方法總結(jié)
- Python中的字典合并與列表合并技巧
- 詳解Python實(shí)現(xiàn)字典合并的四種方法
- 詳解Python 合并字典
- python 將列表里的字典元素合并為一個(gè)字典實(shí)例
- Python如何合并多個(gè)字典或映射
- python兩個(gè)_多個(gè)字典合并相加的實(shí)例代碼
- Python合并2個(gè)字典成1個(gè)新字典的方法(9種)
- Python編寫合并字典并實(shí)現(xiàn)敏感目錄的小腳本
- Python實(shí)現(xiàn)合并兩個(gè)字典的8種方法
相關(guān)文章
pandas中遍歷dataframe的每一個(gè)元素的實(shí)現(xiàn)
這篇文章主要介紹了pandas中遍歷dataframe的每一個(gè)元素的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10Python實(shí)現(xiàn)購物系統(tǒng)(示例講解)
下面小編就為大家?guī)硪黄狿ython實(shí)現(xiàn)購物系統(tǒng)(示例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09如何使用五行Python代碼輕松實(shí)現(xiàn)批量摳圖
簡單來說,摳圖就是將照片的主體人或物品從圖片中摳出來,以便貼到別處使用,下面這篇文章主要給大家介紹了關(guān)于如何使用五行Python代碼輕松實(shí)現(xiàn)批量摳圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04Python數(shù)據(jù)可視化Pyecharts庫的使用教程
pyecharts是一個(gè)用于生成echarts圖表的類庫。echarts是百度開源的一個(gè)數(shù)據(jù)可視化庫,用echarts生成的圖可視化效果非常棒。使用pyechart庫可以在python中生成echarts數(shù)據(jù)圖。本文將詳細(xì)介紹一下Pyecharts庫的使用,需要的可以參考一下2022-02-022020年10款優(yōu)秀的Python第三方庫,看看有你中意的嗎?
2020已經(jīng)過去,在過去的一年里,又有非常多優(yōu)秀的Python庫涌現(xiàn)出來。相對于numpy、TensorFlow、pandas這些已經(jīng)經(jīng)過多年維護(hù)、迭代,對于大多數(shù)Python開發(fā)者耳熟能詳?shù)膸觳煌?/div> 2021-01-01python操作mongodb根據(jù)_id查詢數(shù)據(jù)的實(shí)現(xiàn)方法
這篇文章主要介紹了python操作mongodb根據(jù)_id查詢數(shù)據(jù)的實(shí)現(xiàn)方法,實(shí)例分析了Python根據(jù)pymongo不同版本操作ObjectId的技巧,需要的朋友可以參考下2015-05-05最新評論