最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 實(shí)現(xiàn)二維字典的鍵值合并等函數(shù)

 更新時(shí)間:2019年12月06日 09:32:21   作者:Flying_sfeng  
今天小編就為大家分享一篇python 實(shí)現(xiàn)二維字典的鍵值合并等函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

這篇文章主要講python中關(guān)于字典的一些具體操作,講解的問題都是本人在實(shí)際編程中所遇到的問題,讀者可以根據(jù)自己所遇到的問題具體問題具體分析。

(1) 二維字典的鍵值合并:

先提供一個(gè)應(yīng)用場(chǎ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è)簡(jiǎn)單的字典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)對(duì)多個(gè)二維字典的鍵值相加,只要?jiǎng)?chuàng)建一個(gè)for循環(huán)就行了。

(2)往字典的key里添加一個(gè)新的value:

同樣提供一個(gè)應(yīng)用場(chǎ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è)鍵對(duì)應(yīng)多個(gè)值的情況,當(dāng)出現(xiàn)這種情況時(shí),取最后的鍵值對(duì):

如:

>>> dict1 = {'foo':789, 'foo': 'xyz'} 

>>> dict1 結(jié)果:{'foo': 'xyz'}

以上這篇python 實(shí)現(xiàn)二維字典的鍵值合并等函數(shù)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python守護(hù)進(jìn)程用法實(shí)例分析

    Python守護(hù)進(jìn)程用法實(shí)例分析

    這篇文章主要介紹了Python守護(hù)進(jìn)程用法,實(shí)例分析了Python守護(hù)進(jìn)程的功能及使用方法,需要的朋友可以參考下
    2015-06-06
  • Pytorch實(shí)現(xiàn)基于CharRNN的文本分類與生成示例

    Pytorch實(shí)現(xiàn)基于CharRNN的文本分類與生成示例

    今天小編就為大家分享一篇Pytorch實(shí)現(xiàn)基于CharRNN的文本分類與生成示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python變量基礎(chǔ)知識(shí)

    Python變量基礎(chǔ)知識(shí)

    這篇文章主要介紹Python變量的基礎(chǔ)知識(shí),圍繞Python變量相關(guān)知識(shí)點(diǎn)展開,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-10-10
  • 懶人必備Python代碼之自動(dòng)發(fā)送郵件

    懶人必備Python代碼之自動(dòng)發(fā)送郵件

    在傳統(tǒng)的工作中,發(fā)送會(huì)議紀(jì)要是一個(gè)比較繁瑣的任務(wù),需要手動(dòng)輸入郵件內(nèi)容、收件人、抄送人等信息,每次發(fā)送都需要重復(fù)操作,不僅費(fèi)時(shí)費(fèi)力,而且容易出現(xiàn)疏漏和錯(cuò)誤。本文就來用Python代碼實(shí)現(xiàn)這一功能吧
    2023-05-05
  • Python利用Selenium實(shí)現(xiàn)彈出框的處理

    Python利用Selenium實(shí)現(xiàn)彈出框的處理

    經(jīng)常出現(xiàn)在網(wǎng)頁(yè)上的基于JavaScript實(shí)現(xiàn)的彈出框有三種,分別是?alert、confirm、prompt?。本文主要是學(xué)習(xí)如何利用selenium處理這三種彈出框,感興趣的可以了解一下
    2022-06-06
  • python中format的用法實(shí)例詳解

    python中format的用法實(shí)例詳解

    fotmat作為Python的的格式字符串函數(shù),主要通過字符串中的花括號(hào){},來識(shí)別替換字段,從而完成字符串的格式化,下面這篇文章主要給大家介紹了關(guān)于python中format用法的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Ubuntu中安裝指定Python版本方法詳解(理論上各版本通用)

    Ubuntu中安裝指定Python版本方法詳解(理論上各版本通用)

    現(xiàn)在基于linux的發(fā)行版本有很多,有centos,ubuntu等,一般基于linux的衍生系統(tǒng)至少都安裝了Python2版本,但是現(xiàn)在Python已經(jīng)是3.x版本大行其道了,這篇文章主要給大家介紹了關(guān)于Ubuntu中安裝指定Python版本方法的相關(guān)資料,理論上各版本通用,需要的朋友可以參考下
    2023-06-06
  • Python自動(dòng)化運(yùn)維_文件內(nèi)容差異對(duì)比分析

    Python自動(dòng)化運(yùn)維_文件內(nèi)容差異對(duì)比分析

    下面小編就為大家分享一篇Python自動(dòng)化運(yùn)維_文件內(nèi)容差異對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Python中的random函數(shù)實(shí)例詳解

    Python中的random函數(shù)實(shí)例詳解

    random模塊提供生成偽隨機(jī)數(shù)的函數(shù),在使用時(shí)需要導(dǎo)入random模塊,這篇文章主要介紹了Python中的random函數(shù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • 如何真正的了解python裝飾器

    如何真正的了解python裝飾器

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于如何真正的了解python裝飾器的相關(guān)文章,需要的朋友們可以參考下。
    2020-08-08

最新評(píng)論

寻甸| 临沂市| 靖边县| 伊吾县| 瓦房店市| 巴中市| 中西区| 邹城市| 阜新| 房产| 永靖县| 崇州市| 洪雅县| 维西| 揭阳市| 泾川县| 佛山市| 四子王旗| 赤城县| 巴林左旗| 河东区| 威海市| 定安县| 奈曼旗| 双桥区| 赣州市| 三门县| 讷河市| 伊金霍洛旗| 阳东县| 雷山县| 巴马| 任丘市| 土默特左旗| 嫩江县| 明星| 凌海市| 周至县| 襄城县| 镶黄旗| 太白县|