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

标签:Python,字典,处理
0
投稿

猜你喜欢

  • 高效的MySQL分页

    2011-01-04 20:01:00
  • PHP字典树(Trie树)定义与实现方法示例

    2023-11-15 00:39:50
  • 基本的页面设计元素布局比例

    2007-12-15 09:43:00
  • 调试一段PHP程序时遇到的三个问题

    2023-06-22 11:39:22
  • class和id命名探讨

    2007-10-16 17:55:00
  • go 判断两个 slice/struct/map 是否相等的实例

    2023-07-24 03:42:19
  • css学习笔记: 重置默认样式 css reset

    2009-07-19 14:30:00
  • iframe框架用JavaScript子页面控制父页面

    2009-01-19 13:43:00
  • PHP实现WebSocket实例详解

    2023-06-11 23:08:01
  • 在ASP与ASP.NET之间共享对话状态(2)

    2008-09-02 12:21:00
  • 服务端XMLHTTP(ServerXMLHTTP in ASP)进阶应用-User Agent伪装

    2008-11-11 12:29:00
  • 一些不错的js函数ajax

    2023-08-25 14:01:38
  • 如何用SQLMail建立一个电子刊物自动处理系统?

    2010-06-13 14:36:00
  • W3C优质网页小贴士(一)

    2008-04-06 16:35:00
  • PHP PDOStatement::bindValue讲解

    2023-06-14 11:16:02
  • 浅谈PHP的反射机制

    2023-06-13 17:05:35
  • html中的sub与sup标签

    2009-03-06 13:12:00
  • 一个用JavaScript写的本周是本学期第几周的程序

    2009-03-09 12:49:00
  • prototype.js1.4版开发者手册

    2007-09-30 14:09:00
  • go语言睡眠排序算法实例分析

    2023-07-15 17:42:56
  • asp之家 网络编程 m.aspxhome.com