Python中对字典的几个处理方法分享
作者:data大柳 发布时间:2021-03-13 05:48:57
字典求和
edge_weights = defaultdict(lambda: defaultdict(float))
for idx,node in enumerate(graph.nodes()):
node2com[node] = idx #给每一个节点初始化赋值一个团id
for edge in graph[node].items():
edge_weights[node][edge[0]] = edge[1]['weight']
edge_weights
运行结果:
defaultdict(<function __main__.<lambda>()>,
{'397564': defaultdict(float,
{'15.1.18010.11898': 71,
'15.1.18010.11899': 54,
'15.1.18009.11899': 75,
'15.1.18009.11898': 160}),
'15.1.18010.11898': defaultdict(float,
{'397564': 71,
'577806': 61,
'73827465': 66,
'30009791666': 62,
'30005407392': 59,
'100293225': 102,
'30012147301': 65,
'138661946': 52}),
'1085941': defaultdict(float,
{'15.1.18007.11870': 120,
'15.1.18005.11872': 55,
'15.1.18004.11872': 75,
'15.1.18006.11870': 83,
'15.1.18004.11871': 63})
})
对上述edge_weights所有的值汇入列表并求和:
sum(
[weight for start in edge_weights.keys() for end, weight in edge_weights[start].items()]
)
列表剔重并计数
方法1:
统计列表中的重复项出现的次数。
循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1.
lists = ['a','a','b',5,6,7,5,'a']
count_dict = dict()
for item in lists:
if item in count_dict:
count_dict[item] += 1
else:
count_dict[item] = 1
方法2:
使用collections.defaultdict(),将default_factory设为int,代码如下:
from collections import defaultdict
#s = 'mississippi'
s = ['a','a','b',5,6,7,5,'a']
d = defaultdict(int)
for k in s:
d[k] += 1
print('\n',d)
获取字典中最大的value
a = {'a':2,'b':3,'c':5,'d':9,'e':4}
print(max(a.values()))
获取字典中出现value最大的key
a = {'a':2,'b':3,'c':5,'d':9,'e':4}
print(max(a,key=a.get))
运行结果:
d
字典对应元素追加
对于列表:
s = [('yellow',1),('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
统计列表字典有两种方法:
方法1:
用dict.setdefault()实现。
代码如下:
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = {}
for k, v in s:
d.setdefault(k,[]).append(v)
a = sorted(d.items())
print(a)
运行结果:
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
方法2;
使用collections.defaultdict(),并使用list作第一个参数,可以很容易将键-值对序列转换为列表字典,
代码如下:
from collections import defaultdict
s = [('yellow',1),('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k, v in s:
d[k].append(v)
a = sorted(d.items())
print(a)
运行结果:
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
当字典中没有的键第一次出现时,default_factory自动为其返回一个空列表,list.append()会将值添加进新列表;再次遇到相同的键时,list.append()将其它值再添加进该列表。这种方法比使用dict.setdefault()更为便捷。
字典对应元素追加并剃重
对于列表:
s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]
统计并剃重:
from collections import defaultdict
s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]
d = defaultdict(set)
for k, v in s:
d[k].add(v)
print('\n',d)
运行结果:
defaultdict(<class 'set'>, {'red': {1, 3}, 'blue': {2, 4}})
对字典进行过滤
创建一个新的字典,可以利用字典推导式
headerTable = {k: v for k, v in headerTable.items() if v > 2}
反转字典的方法(字典的key和value对换)
使用字典推导:
m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
{v: k for k, v in m.items()}
使用压缩器:
m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
m.items() #[('a', 1), ('c', 3), ('b', 2), ('d', 4)]
zip(m.values(), m.keys()) #[(1, 'a'), (3, 'c'), (2, 'b'), (4, 'd')]
mi = dict(zip(m.values(), m.keys()))
字典的key和value对换并把key按照value进行列表合并
对于字典:
defaultdict(int,
{'2100201919459568780': 0,
'2100201927433498080': 1,
'2100201935997972401': 2,
'2100201934073343294': 3,
'2100201938073398590': 3,
'2100201938426179130': 2,
'2100201938057211020': 4,
'2100201938030472762': 3,
'2100201940356247098': 4,
'2100201939150253460': 4,
'2100201935737728404': 4,
'2100201938984381844': 4,
'2100201937770425806': 4,
'2100201937563397283': 4,
'2100201941426286415': 4,
'2100201936062819790': 4,
'2100201936279351185': 4,
'2100201934074097553': 4,
'2100201940543713169': 4})
进行处理:
track_merge = defaultdict(list)
for i in track_label.items():
track_merge[str(i[1])].append(i[0])
输出:
defaultdict(list,
{'0': ['2100201919459568780'],
'1': ['2100201927433498080'],
'2': ['2100201935997972401', '2100201938426179130'],
'3': ['2100201934073343294',
'2100201938073398590',
'2100201938030472762'],
'4': ['2100201938057211020',
'2100201940356247098',
'2100201939150253460',
'2100201935737728404',
'2100201938984381844',
'2100201937770425806',
'2100201937563397283',
'2100201941426286415',
'2100201936062819790',
'2100201936279351185',
'2100201934074097553',
'2100201940543713169']})
合并字典
appointment = { 'soccer' : { 'day': 20, 'month': 'april' } }
appointment2 = { 'gym' : { 'day': 5, 'month': 'may' } }
appointment.update(appointment2)
appointment
输出:
{
'gym': {'day': 5, 'month': 'may'},
'soccer': {'day': 20, 'month': 'april'}
}
来源:https://blog.csdn.net/yawei_liu1688/article/details/126563474


猜你喜欢
- 视觉设计是什么,人们怎么认为它的,自己又是怎么对待和理解它,它的核心价值是什么。视觉设计,冒似很艺术,跟艺术相关的职业,给大多数人的印象是做
- 一、简介简单记录一下存储过程的使用。存储过程是预编译SQL语句集合,也可以包含一些逻辑语句,而且当第一次调用存储过程时,被调用的存储过程会放
- 本文实例讲述了GO语言映射(Map)用法。分享给大家供大家参考。具体如下:映射是一种内置的数据结构,用来保存键值对的无序集合。(1)映射的创
- 1。在Asp页面首部<head>加入 Response.Buffer =
- 这篇文章主要介绍了python 上下文管理器原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- <html> <head> <meta http-equiv="Content-Langu
- 前言本文主要跟大家分享了关于Ubuntu 18.04配置mysql及配置远程连接的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看
- 今天分享 3 个 Python 编程小技巧,来看看你是否用过?1、如何按照字典的值的大小进行排序我们知道,字典的本质是哈希表,本身是无法排序
- 编译原理老师要求写一个java的词法分析器,想了想决定用python写一个。目标能识别出变量,数字,运算符,界符和关键字,用excel表打印
- 基本开发环境· Python 3.6· Pycharm相关模块使用目标网页分析输入想看的小说内容,点击搜索这里会返回很多结果,我只选择第一个
- 按时间删除文件# importing the required modulesimport osimport shutilimport ti
- 这篇文章主要介绍了调试Django时打印SQL语句的日志代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 1、灵活运用样式熟悉网页设计的网友就知道,调用Style的方法很多,我们可以单击鼠标右键选择Custo
- 前言自从学过存储过程后,就再也没有碰过存储过程,这是毕业后写的第一个存储过程。因为项目里设备的种类比较多,分别存在不同的数据表中,java中
- 1、准备工作pip install qcloudsms_py1.注册腾讯云账号2.在产品列表内找到短信,在短信内添加应用3.获取对应的SDK
- 前言记得刚入门那个时候,自己处理编码转换问题往往是“百度:url解码、base64加密、hex……”,或者是使用一款叫做“小葵多功能转换工具
- 前言文章中的代码是参考基于Pytorch的特征图提取编写的代码本身很简单这里只做简单的描述。1. 效果图先看效果图(第一张是原图,后面的都是
- 十六进制(Hexadecimal)是计算机中数据的一种表示方法。同日常生活中的表示法不一样,它由0-9,A-F组成,字母不区分大小写。与10
- 1.前言数据库的重要性相信大家都有所了解,作为各种数据的电子资料夹,其中可能包含了各种信息,从企业员工信息到网站访问或成交数据无所不包,甚至
- 直接to_excel会被覆盖,借助ExcelWriter可以实现写多个sheet。from openpyxl import load_wor