设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间23 现在时间23 缓存数据 好好的睡一觉吧,闭上眼睛做个好梦,明天睁眼又会是美好的一天,晚安好梦。

好好的睡一觉吧,闭上眼睛做个好梦,明天睁眼又会是美好的一天,晚安好梦。

查看: 394|回复: 0

Python中对字典的几个处理方法分享

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:226
  • 打卡月天数:0
  • 打卡总奖励:3389
  • 最近打卡:2025-04-22 10:51:52
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
388
主题
362
精华
0
金钱
4542
积分
804
注册时间
2022-12-30
最后登录
2025-4-22

发表于 2023-2-10 22:49:25 | 显示全部楼层 |阅读模式
字典求和
  1. edge_weights = defaultdict(lambda: defaultdict(float))
  2. for idx,node in enumerate(graph.nodes()):
  3.     node2com[node] = idx    #给每一个节点初始化赋值一个团id
  4.     for edge in graph[node].items():
  5.         edge_weights[node][edge[0]] = edge[1]['weight']

  6. edge_weights
复制代码
运行结果:
  1. 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所有的值汇入列表并求和:
  1. sum(
  2.     [weight for start in edge_weights.keys() for end, weight in edge_weights[start].items()]
  3. )
复制代码
列表剔重并计数

方法1:
统计列表中的重复项出现的次数。
循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1.
  1. lists = ['a','a','b',5,6,7,5,'a']
  2. count_dict = dict()

  3. for item in lists:
  4.     if item in count_dict:
  5.         count_dict[item] += 1
  6.     else:
  7.         count_dict[item] = 1
复制代码
方法2:
使用collections.defaultdict(),将default_factory设为int,代码如下:
  1. from collections import defaultdict
  2. #s = 'mississippi'
  3. s = ['a','a','b',5,6,7,5,'a']
  4. d = defaultdict(int)
  5. for k in s:
  6.     d[k] += 1
  7. print('\n',d)
复制代码
获取字典中最大的value
  1. a = {'a':2,'b':3,'c':5,'d':9,'e':4}
  2. print(max(a.values()))
复制代码
获取字典中出现value最大的key
  1. a = {'a':2,'b':3,'c':5,'d':9,'e':4}
  2. print(max(a,key=a.get))
复制代码
运行结果:
  1. d
复制代码
字典对应元素追加

对于列表:
  1. s = [('yellow',1),('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
复制代码
统计列表字典有两种方法:
方法1:
用dict.setdefault()实现。
代码如下:
  1. s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
  2. d = {}
  3. for k, v in s:
  4.     d.setdefault(k,[]).append(v)
  5. a = sorted(d.items())
  6. print(a)
复制代码
运行结果:
  1. [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
复制代码
方法2;
使用collections.defaultdict(),并使用list作第一个参数,可以很容易将键-值对序列转换为列表字典,
代码如下:
  1. from collections import defaultdict
  2. s = [('yellow',1),('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
  3. d = defaultdict(list)
  4. for k, v in s:
  5.     d[k].append(v)
  6. a = sorted(d.items())
  7. print(a)
复制代码
运行结果:
  1. [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
复制代码
当字典中没有的键第一次出现时,default_factory自动为其返回一个空列表,list.append()会将值添加进新列表;再次遇到相同的键时,list.append()将其它值再添加进该列表。这种方法比使用dict.setdefault()更为便捷。

字典对应元素追加并剃重

对于列表:
  1. s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]
复制代码
统计并剃重:
  1. from collections import defaultdict
  2. s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]
  3. d = defaultdict(set)
  4. for k, v in s:
  5.     d[k].add(v)
  6. print('\n',d)
复制代码
运行结果:
  1. defaultdict(<class 'set'>, {'red': {1, 3}, 'blue': {2, 4}})
复制代码
对字典进行过滤

创建一个新的字典,可以利用字典推导式
  1. headerTable = {k: v for k, v in headerTable.items() if v > 2}
复制代码
反转字典的方法(字典的key和value对换)

使用字典推导:
  1. m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
  2. {v: k for k, v in m.items()}
复制代码
使用压缩器:
  1. m = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
  2. m.items()    #[('a', 1), ('c', 3), ('b', 2), ('d', 4)]
  3. zip(m.values(), m.keys())   #[(1, 'a'), (3, 'c'), (2, 'b'), (4, 'd')]
  4. mi = dict(zip(m.values(), m.keys()))
复制代码
字典的key和value对换并把key按照value进行列表合并
对于字典:
  1. defaultdict(int,
  2.             {'2100201919459568780': 0,
  3.              '2100201927433498080': 1,
  4.              '2100201935997972401': 2,
  5.              '2100201934073343294': 3,
  6.              '2100201938073398590': 3,
  7.              '2100201938426179130': 2,
  8.              '2100201938057211020': 4,
  9.              '2100201938030472762': 3,
  10.              '2100201940356247098': 4,
  11.              '2100201939150253460': 4,
  12.              '2100201935737728404': 4,
  13.              '2100201938984381844': 4,
  14.              '2100201937770425806': 4,
  15.              '2100201937563397283': 4,
  16.              '2100201941426286415': 4,
  17.              '2100201936062819790': 4,
  18.              '2100201936279351185': 4,
  19.              '2100201934074097553': 4,
  20.              '2100201940543713169': 4})
复制代码
进行处理:
  1. track_merge = defaultdict(list)
  2. for i in track_label.items():
  3.     track_merge[str(i[1])].append(i[0])
复制代码
输出:
  1. 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']})
复制代码
合并字典
  1. appointment = { 'soccer' : { 'day': 20, 'month': 'april' } }
  2. appointment2 = { 'gym' : { 'day': 5, 'month': 'may' } }
  3. appointment.update(appointment2)
  4. appointment
复制代码
输出:
  1. {    'gym': {'day': 5, 'month': 'may'},     'soccer': {'day': 20, 'month': 'april'}}
复制代码
到此这篇关于Python中对字典的几个处理方法分享的文章就介绍到这了,更多相关Python字典处理内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表