python 实现二维字典的键值合并等函数

 更新时间:2019年12月06日 09:32:21   作者:Flying_sfeng  
今天小编就为大家分享一篇python 实现二维字典的键值合并等函数,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

这篇文章主要讲python中关于字典的一些具体操作,讲解的问题都是本人在实际编程中所遇到的问题,读者可以根据自己所遇到的问题具体问题具体分析。

(1) 二维字典的键值合并:

先提供一个应用场景:

假设我有两个二维字典:

room1 = {orderid1:{roomid1:pred1,roomid2:pred2},orderid2:{roomid3:pred3,roomid4:pred4}}
room2 = {orderid1:{roomid1:pred5,roomid2:pred6},orderid2:{roomid3:pred7,roomid4:pred8}}

这两个字典的key相同,只有第二维的value不同,我的目的是把这两个字典的value相加,得到的结果如下:

sum_room = {orderid1:{roomid1:pred1+pred5,roomid2:pred2+pred6},orderid2:{roomid3:pred3+pred7,roomid4:pred4+pred8}}

具体的实现代码如下:(为了提高通用性,以下代码创建了两个简单的字典obj3,obj4)

实现二维字典的键值合并,即将同个key下的value相加:

思路:先创建一个空字典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

看一下结果:

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})

实现了文章开头所述功能。

sum_value(obj)这个函数可以实现对多个二维字典的键值相加,只要创建一个for循环就行了。

(2)往字典的key里添加一个新的value:

同样提供一个应用场景:

dict1 = {'order1': ['room1', 'room1'],'order2': ['room3', 'room3']}
 
dict2 = {'order1': 'room2', 'order2': 'room3'}

我的目的是想把dict2中key里的value添加进dict1中相同的key里,理想结果如下:

dict1 = {'order1': ['room1', 'room1', 'room2'], 'order2': ['room3', 'room3', 'room3']}

下面给出实现代码:

for key in dict1.keys():
 a=[]
 b=[]
 b = dict1[key] 
 for i in b: ##这一步很关键,目的是把dict1[key]的value值逐个取出存进a,再把dict2[key]的value值存进a里面,这样可以避免dict1[key]出现多个list层
  a.append(i)
 a.append(dict2[key]) ##dict2[key]必须保证只有一个元素
 dict1[key] = a

结果如下:

dict1
Out[88]: {'order1': ['room1', 'room1', 'room2'], 'order2': ['room3', 'room3', 'room3']}

下一步,统计key中的value个数:

from collections import Counter
for key,item in dict1.items():
 count[key] = Counter(item)

结果如下:

count

Out[91]: {'order1': Counter({'room1': 2, 'room2': 1}), 'order2': Counter({'room3': 3})}

接着,取出每个外层key中里层value最大的key(比较拗口,即取出每个orderid中roomid的值最大的roomid):

(举个例子,在order1中,room1的值为2,是最大值,所以我把room1赋给order1,即result1 = {'order1':'room1'})

result = {}
for key,item in count.items():
 result[key] = max(item,key=item.get)

结果如下:

result
Out[94]: {'order1': 'room1', 'order2': 'room3'}

(3)字典的排序:sorted()函数

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)字典中不允许出现一个键对应多个值的情况,当出现这种情况时,取最后的键值对:

如:

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

>>> dict1 结果:{'foo': 'xyz'}

以上这篇python 实现二维字典的键值合并等函数就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python守护进程用法实例分析

    Python守护进程用法实例分析

    这篇文章主要介绍了Python守护进程用法,实例分析了Python守护进程的功能及使用方法,需要的朋友可以参考下
    2015-06-06
  • Pytorch实现基于CharRNN的文本分类与生成示例

    Pytorch实现基于CharRNN的文本分类与生成示例

    今天小编就为大家分享一篇Pytorch实现基于CharRNN的文本分类与生成示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python变量基础知识

    Python变量基础知识

    这篇文章主要介绍Python变量的基础知识,围绕Python变量相关知识点展开,需要的朋友可以参考下面文章的具体内容
    2021-10-10
  • 懒人必备Python代码之自动发送邮件

    懒人必备Python代码之自动发送邮件

    在传统的工作中,发送会议纪要是一个比较繁琐的任务,需要手动输入邮件内容、收件人、抄送人等信息,每次发送都需要重复操作,不仅费时费力,而且容易出现疏漏和错误。本文就来用Python代码实现这一功能吧
    2023-05-05
  • Python利用Selenium实现弹出框的处理

    Python利用Selenium实现弹出框的处理

    经常出现在网页上的基于JavaScript实现的弹出框有三种,分别是 alert、confirm、prompt 。本文主要是学习如何利用selenium处理这三种弹出框,感兴趣的可以了解一下
    2022-06-06
  • python中format的用法实例详解

    python中format的用法实例详解

    fotmat作为Python的的格式字符串函数,主要通过字符串中的花括号{},来识别替换字段,从而完成字符串的格式化,下面这篇文章主要给大家介绍了关于python中format用法的相关资料,需要的朋友可以参考下
    2022-05-05
  • Ubuntu中安装指定Python版本方法详解(理论上各版本通用)

    Ubuntu中安装指定Python版本方法详解(理论上各版本通用)

    现在基于linux的发行版本有很多,有centos,ubuntu等,一般基于linux的衍生系统至少都安装了Python2版本,但是现在Python已经是3.x版本大行其道了,这篇文章主要给大家介绍了关于Ubuntu中安装指定Python版本方法的相关资料,理论上各版本通用,需要的朋友可以参考下
    2023-06-06
  • Python自动化运维_文件内容差异对比分析

    Python自动化运维_文件内容差异对比分析

    下面小编就为大家分享一篇Python自动化运维_文件内容差异对比分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Python中的random函数实例详解

    Python中的random函数实例详解

    random模块提供生成伪随机数的函数,在使用时需要导入random模块,这篇文章主要介绍了Python中的random函数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • 如何真正的了解python装饰器

    如何真正的了解python装饰器

    在本篇内容里小编给大家整理的是一篇关于如何真正的了解python装饰器的相关文章,需要的朋友们可以参考下。
    2020-08-08

最新评论