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

目录
  • 字典求和
  • 列表剔重并计数
  • 获取字典中最大的value
  • 获取字典中出现value最大的key
  • 字典对应元素追加
  • 字典对应元素追加并剃重
  • 对字典进行过滤
  • 反转字典的方法(字典的key和value对换)
  • 合并字典

字典求和

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

到此这篇关于Python中对字典的几个处理方法分享的文章就介绍到这了,更多相关Python字典处理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python字典排序浅析介绍

    目录 1.语法规则 1-1 代码实例 1-2 参数说明 2.对字典排序 2-1 简单示例 2-2 说明 2-3 复杂示例 2-4 说明 1.语法规则 1-1 代码实例 sorted(iterable, key=None,reverse=False) 1-2 参数说明 (1)iterable:代表的是可迭代的对象. (2)key=None:用来进行比较的元素,具体的值来源于可迭代的对象中. (3)reverse=False:排序规则,reverse=False升序(默认),reverse=True

  • Python入门之字典的使用教程

    目录 前沿 字典操作 创建字典 嵌套字典 dict() 创建字段 访问字典中的值 更新字典 删除字典元素 检查键是否存在 字典的遍历 字典函数 获取字段的长度 复制字典 批量创建键 前沿 Python字典是一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 字典的每个键值key=>value对用冒号 : 分割,每个对之间用逗号,分割,整个字典包括在花括号{}中 ,格式如下: {key1 : value1, key2 : value2 } 字典操作 创建字典 字典由键和值

  • Python字典查找数据的5个基础操作方法

    目录 前言 一.key值查找 二.函数查找 2.1 get() 2.2 keys() 2.3 values() 2.4 items() 附:字典的常用方法 总结 前言 上一篇文章写了关于字典操作方法的增删改,这篇主要讲解如何查找字典数据.查找数据写法一共有两种,一种能够是key值查找,另外一种是按照函数的写法进行数据查找. 一.key值查找 如果当前查找的key存在,则返回对应的值,否则则报错. 代码示例: dict1 = {'name': 'Rose', 'age': 30, 'sex': '

  • Python基础之字典的详细使用教程

    目录 一. 什么是字典 二. 创建字典 三. 字典元素获取 四. 字典元素的增删改操作 五. 字典的视图操作 一. 什么是字典 字典作为Python的一个内置数据结构,和列表一样都是可变序列的,但是它是无序的,以键值对的方式存储数据. 二. 创建字典 创建字典的两种方式,一种使用{ } 另一种使用内置函数dict() # author: 爪哇斗罗(javaDouLuo) # date: 2022/7/11 22:51 # 字典的创建 dict01={"A": 1, "B&qu

  • Python字典高级用法深入分析讲解

    目录 一. collections 中 defaultdict 的使用 1.字典的键映射多个值 2.统计字典中某个值出现的次数 二.collections 创建有序字典 1.改变 key-value 的顺序 2.删除 key_value 三.字典排序 1.按照 key 进行排序 2.按照 value 进行排序 四.通过某个关键字排序一个字典列表 一. collections 中 defaultdict 的使用 1.字典的键映射多个值 将下面的列表转成字典 l = [('a',2),('b',3)

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

    目录 字典求和 列表剔重并计数 获取字典中最大的value 获取字典中出现value最大的key 字典对应元素追加 字典对应元素追加并剃重 对字典进行过滤 反转字典的方法(字典的key和value对换) 合并字典 字典求和 edge_weights = defaultdict(lambda: defaultdict(float)) for idx,node in enumerate(graph.nodes()): node2com[node] = idx #给每一个节点初始化赋值一个团id fo

  • Python中给List添加元素的4种方法分享

    List 是 Python 中常用的数据类型,它一个有序集合,即其中的元素始终保持着初始时的定义的顺序(除非你对它们进行排序或其他修改操作). 在Python中,向List添加元素,方法有如下4种方法(append(),extend(),insert(), +加号) 1. append() 追加单个元素到List的尾部,只接受一个参数,参数可以是任何数据类型,被追加的元素在List中保持着原结构类型. 此元素如果是一个list,那么这个list将作为一个整体进行追加,注意append()和ext

  • 在Python中实现字典反转案例

    有时候会碰到需求,将字典来反转,即:字典中的键作为值,而字典中的值作为键.对于字典比较小,可以使用普通方法 方法一: 使用普通方法转换 >>> d = {'a': 1, 'b': 2, 'c': 3} >>> def invert_dict(d): ... return dict([(v,k) for (k,v) in d.iteritems()]) ... >>> invert_dict(d) {1: 'a', 2: 'b', 3: 'c'} 方法二

  • Python中创建字典的几种方法总结(推荐)

    1.传统的文字表达式: >>> d={'name':'Allen','age':21,'gender':'male'} >>> d {'age': 21, 'name': 'Allen', 'gender': 'male'} 如果你可以事先拼出整个字典,这种方式是很方便的. 2.动态分配键值: >>> d={} >>> d['name']='Allen' >>> d['age']=21 >>> d[

  • Python中遍历字典过程中更改元素导致异常的解决方法

    先来回顾一下Python中遍历字典的一些基本方法: 脚本: #!/usr/bin/python dict={"a":"apple","b":"banana","o":"orange"} print "##########dict######################" for i in dict: print "dict[%s]=" % i,

  • Python中的字典遍历备忘

    备忘一下python中的字典如何遍历,没有什么太多技术含量.仅供作为初学者的我参考. 复制代码 代码如下: #!/usr/bin/env python # coding=utf-8 demoDict = {'1':'Chrome', '2':'Android'} for key in demoDict.keys():     print key for value in demoDict.values():     print value for key in demoDict:     pri

  • python中的字典操作及字典函数

    字典 dict_fruit = {'apple':'苹果','banana':'香蕉','cherry':'樱桃','avocado':'牛油果','watermelon':'西瓜'} 字典的操作 #字典的遍历方式 #默认遍历(遍历key) for value in dict_fruit: print(value) ''''' 遍历出的值: watermelon apple cherry avocado banana ''' #使用key遍历(与默认遍历一样) for key in dict_f

  • 在Python中合并字典模块ChainMap的隐藏坑【推荐】

    在Python中,当我们有两个字典需要合并的时候,可以使用字典的 update 方法,例如: a = {'a': 1, 'b': 2} b = {'x': 3, 'y': 4} a.update(b) print(a) 运行效果如下图所示: 然而,这个方法有一个问题--它会改变其中一个字典.如果我们不想改变原有的两个字典,那么我们必需要单独再创建一个字典: a = {'a': 1, 'b': 2} b = {'x': 3, 'y': 4} c = dict(a) c.update(b) prin

  • 解决python中遇到字典里key值为None的情况,取不出来的问题

    在python 命令行界面里,是可以去取key为None的value值. 在脚本里面就取不出了,可以用如下的方式解决. hosts = {"a":"111", "None":b, "c":"333"} hname = "" for (k,v) in hosts.items(): if k == None: print " value=%s " % (v) else:

  • Python中的字典到底是有序的吗

    之前写了文章介绍python中的列表和字典,在文章中描述到了python中的列表是有序的,字典是无序的,后来有粉丝在群里提醒我,说python3.6的版本之后,字典是有序的,因此,我找了一个低版本的python来验证一下效果: 首先,从官网下载python3.4的版本,然后编写一行代码验证一下打印字典的所有key.查看打印出来的key的顺序: Python3.6以下版本:(以3.4版本为例) 你该不会以为只有使用keys()函数是无序的吧: 从上图可以看出,分别在cmd窗口和pycharm中打印

随机推荐