Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python字典嵌套字典实例

python字典嵌套字典实例

作者头像
py3study
发布于 2020-01-09 10:10:33
发布于 2020-01-09 10:10:33
1.6K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

日志文件样式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2018-06-27 09:07:37 Postman[INFO]: [1530061656f8lda-7M5E9] from: <lilh@test.com><router>, to: <xiey@test.com,zhengj@test.com>, size: 22018
2018-06-27 09:07:37 Postman[INFO]: [1530061656f8lda-7M5E9] system rule send: pass filter
2018-06-27 09:07:37 Postman[INFO]: [1530061656f8lda-7M5E9] system rule recv: pass filter
2018-06-27 09:07:37 Postman[INFO]: [1530061656f8lda-7M5E9] user rule [xiey@test.com]: pass filter
2018-06-27 09:07:37 Postman[INFO]: [1530061656f8lda-7M5E9] user rule [xiey@test.com] result : True [] False
2018-06-27 09:07:37 Postman[INFO]: [1530061656f8lda-7M5E9] save file to: INBOX (xiey@test.com)
2018-06-27 09:07:37 Postman[INFO]: [1530061656f8lda-7M5E9] deliver mail to : xiey@test.com
2018-06-27 09:07:37 Postman[INFO]: [1530061656f8lda-7M5E9] user rule [zhengj@test.com]: pass filter
2018-06-27 09:07:37 Postman[INFO]: [1530061656f8lda-7M5E9] user rule [zhengj@test.com] result : True [] False
2018-06-27 09:07:37 Postman[INFO]: [1530061656f8lda-7M5E9] save file to: INBOX (zhengj@test.com)
2018-06-27 09:07:37 Postman[INFO]: [1530061656f8lda-7M5E9] deliver mail to : zhengj@test.com
2018-06-27 09:07:37 Postman[INFO]: [1530061656f8lda-7M5E9] add reply task: xiey@test.com (AhKz9)
2018-06-27 09:07:37 Postman[INFO]: wx_notify_worker start
2018-06-27 09:07:37 Postman[INFO]: wx_notify_worker finish
2018-06-27 09:07:37 Postman[INFO]: program quit
2018-06-27 09:07:45 Postman[INFO]: program start
2018-06-27 09:07:45 Postman[INFO]: [1530061664nXQwH-r98pc] from: <gxm@domain.com><router>, to: <li@ceshi.com>, size: 14371
2018-06-27 09:07:45 Postman[INFO]: [1530061664nXQwH-r98pc] system rule recv: pass filter
2018-06-27 09:07:45 Postman[INFO]: [1530061664nXQwH-r98pc] user rule [li@ceshi.com]: pass filter
2018-06-27 09:07:45 Postman[INFO]: [1530061664nXQwH-r98pc] user rule [li@ceshi.com] result : True [] False
2018-06-27 09:07:45 Postman[INFO]: [1530061664nXQwH-r98pc] 192.168.10.20 is trustip
2018-06-27 09:07:45 Postman[INFO]: [1530061664nXQwH-r98pc] save file to: INBOX (li@ceshi.com)
2018-06-27 09:07:45 Postman[INFO]: [1530061664nXQwH-r98pc] deliver mail to : li@ceshi.com
2018-06-27 09:07:45 Postman[INFO]: [1530061664nXQwH-r98pc] add reply task: li@ceshi.com (YV5Lm)
2018-06-27 09:07:45 Postman[INFO]: wx_notify_worker start
2018-06-27 09:07:45 Postman[INFO]: wx_notify_worker finish
2018-06-27 09:07:45 Postman[INFO]: program quit

脚本代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/python
# coding: utf-8
import os
import re
import pprint

d = {}   #定义一个空字典


with open("/root/postman.log") as f:      #打开日志文件,并赋值给f,使用with表示完成后会自动关闭
    for line in f:          #循环读取每一行                                                                           
        m = re.search(r'\[([0-9A-Za-z-]{21})\].*size: ([0-9]+)$', line.strip())      #按照正则表达式查找id和size,strip()去除收尾空格
        if m is not None:     #假如没有返回值,即没有匹配到,然后跳出这个if语句块
            id, size = m.groups()      #返回一个元组,索引0为上面第一个正则表达式匹配到的ID值,索引1为上面第二个正则表达式匹配到的size值(m.groups() 其实等于 (m.group(1), m.group(2))if id not in d:      #如果id不在字典d里面,然后初始化(recp这个初始化为列表),下一次循环的时候,同一个id就不会执行if语句块(即每个ID第一次都会初始化字典的值)
                d[id] = {
                  'size': 0,
                  'recp': []
                }
            d[id]['size'] = int(size)    #如果id存在字典中,将m.group(1)赋值给字典中size,并转换成×××
        

        m = re.search(r'\[([0-9A-Za-z-]{21})\] save file to:.*\(([^\(\)]+)\)$', line.strip())      #按照正则表达式查找id和收件人,strip()去除收尾空格
        if m is not None:      #假如没有返回值,即没有匹配到,然后跳出这个if语句块
            id, recp = m.groups()      #返回一个元组,索引0为上面第一个正则表达式匹配到的ID值,索引1为上面第二个正则表达式匹配到的收件人值(m.groups() 其实等于 (m.group(1), m.group(2))if id not in d:      #如果id不在字典d里面,然后初始化(recp这个初始化为列表),下一次循环的时候,同一个id就不会执行if语句块(即每个ID第一次都会初始化字典的值)
                d[id] = {
                  'size': 0,
                  'recp': []
                }
            d[id]['recp'].append(recp)    #如果id存在字典中,将m.group(2)添加到字典中recp列表中



l = []     #定义一个空列表
for id, e in d.items():      #循环遍历字典d,得到id和e,其中e是子字典。
    total_size = e['size'] * len(e['recp']) / (1024.0 ** 2)     #所以同一个id的总容量=大小*recp的长度即数量,再由B换算成M
    l.append((id, len(e['recp']), total_size))      #将这三个值(id、收件人数量、总容量),作为一个元素添加到列表



print("\n")
print(">>>>>>>>>>>>>>>统计每隔ID产生的收件人数量和总容量(TOP20)>>>>>>>>>>>>>>>")
#l.sort(key=lambda x: x[2], reverse=True)      #给l列表排序下,以列表索引值2为排序条件

def key_func(x):
    return x[2]
l.sort(key=key_func, reverse=True)

'''
函数作为参数

key_func(l[0]) -> 123
key_func(l[1]) -> 456

函数作为返回值
'''

for id, recp_num, total_size in l[:20]:      #取前排序后的前20个元素,然后循环并按照下面的格式打印出来
    print('邮件id为{},收件人数量为{}个,总大小为{}M'.format(id,recp_num,total_size))

字典样式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{'1530028804NYIxH-Si3rT': {'recp': [], 'size': 165241}, '1530028863UJOjD-1AxwS': {'recp': [], 'size': 3007}, '1530028818QBDbP-KLgft': {'recp': [], 'size': 85981}}

运行结果:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[PYTHON]核心编程笔记(15.Py
记号       说明                                          举例
py3study
2020/01/09
7420
python元组 字典 集合
In [3]: print id(a),id(b) 40886560 40886560
py3study
2020/01/09
5720
python元组 字典 集合
Install Jumpserver47
[tasks] . assets.tasks.push_system_user_to_assets . assets.tasks.push_system_user_to_assets_manual . assets.tasks.push_system_user_util . assets.tasks.set_admin_user_connectability_info . assets.tasks.set_assets_hardware_info . assets.tasks.set_system_user_connectablity_info . assets.tasks.test_admin_user_connectability_manual . assets.tasks.test_admin_user_connectability_period . assets.tasks.test_admin_user_connectability_util . assets.tasks.test_asset_connectability_manual . assets.tasks.test_asset_connectability_util . assets.tasks.test_system_user_connectability_manual . assets.tasks.test_system_user_connectability_period . assets.tasks.test_system_user_connectability_util . assets.tasks.update_asset_hardware_info_manual . assets.tasks.update_assets_hardware_info_period . assets.tasks.update_assets_hardware_info_util . celery.accumulate . celery.backend_cleanup . celery.chain . celery.chord . celery.chord_unlock . celery.chunks . celery.group . celery.map . celery.starmap . common.tasks.send_mail_async . ops.tasks.hello . ops.tasks.hello_callback . ops.tasks.run_ansible_task . terminal.tasks.clean_orphan_session . terminal.tasks.delete_terminal_status_period . users.tasks.write_login_log_async | Worker: Starting Hub ^-- substep ok | Worker: Starting Pool ^-- substep ok | Worker: Starting Consumer | Consumer: StartingConnection Connected to redis://127.0.0.1:6379/3 ^-- substep ok | Consumer: StartingEvents ^-- substep ok | Consumer: Starting Mingle mingle: searching for neighbors mingle: all alone ^-- substep ok | Consumer: Starting Tasks ^-- substep ok | Consumer: Starting Control ^-- substep ok | Consumer: Starting Gossip ^-- substep ok | Consumer: Starting Heart ^-- substep ok | Consumer: Startingevent loop | Worker: Hub.register Pool... 2018-07-2301:52:37 [signal_handler DEBUG] App ready signal recv App ready signal recv 2018-07-2301:52:37 [signal_handler DEBUG] Start need start task: [assets.tasks.update_assets_hardware_info_period, asset
franket
2022/07/11
2880
02.爬虫基础知识与简易爬虫实现
CSS 基础语法 CSS规则:选择器,以及一条或多条声明。 selector {declaration1; ...; desclarationN} 每条声明是由一个属性和一个值组成 property: value 例子 h1 {color: red; font-size: 14px} ---- 元素选择器 直接选择文档元素 比如 head,p <html> <head> <style type="text/css"> h1 {text-decoration: overline} h2
qubianzhong
2018/08/08
4670
02.爬虫基础知识与简易爬虫实现
Redis Cluster的搭建与部署,实现redis的分布式方案
  上篇Redis Sentinel安装与部署,实现redis的高可用实现了redis的高可用,针对的主要是master宕机的情况,我们发现所有节点的数据都是一样的,那么一旦数据量过大,redi也会效率下降的问题。redis3.0版本正式推出后,有效地解决了Redis分布式方面的需求,当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构方法达到负载均衡的目的。
青石路
2018/09/10
1.8K0
Redis Cluster的搭建与部署,实现redis的分布式方案
hbase Normalizer解决预分区错误,在不动数据的情况下完美解决热点问题
问题导读 1.对于预分区错误,hbase使用什么功能解决? 2.Region Normalizer的功能是什么? 3.在什么情况下运行Normalizer 比较好? 4.哪个版本开始有Normali
用户1410343
2018/07/26
1.5K0
hbase Normalizer解决预分区错误,在不动数据的情况下完美解决热点问题
Java发送邮件初窥
  最近朋友的公司有用到这个功能,之前对这一块也不是很熟悉,就和他一起解决出现的异常的同时,也初窥一下使用Apache Common Email组件进行邮件发送。
阿豪聊干货
2018/08/09
7000
Java发送邮件初窥
Python字符串的匹配和搜索
如果你想匹配或者搜索特定的字段的时候,如果你匹配的是相对比较简单的字符串的时候你只需要利用find()、rfind()、endswitch()、startswitch()等类似的方法即可,示例如下:
后场技术
2020/09/03
1.7K0
openstack常用命令
查看rabbitmq 队列:rabbitmqctl list_queues [root@controller ~]# rabbitmqctl list_queues Listing queues reply_56e60e52bf7145a3b6b5e1d54b633599 0 q-agent-notifier-binding-activate.node2 0 q-agent-notifier-port-update_fanout_1fa7ca53d470470b8c4fe240bf73a567 0 reply_752f5636dc114913b9430c5f76182b9a 0 q-agent-notifier-port-update_fanout_b38b3e13404f4490819bb4ee89141c55 0 q-agent-notifier-network-update.controller 0 q-agent-notifier-binding-activate_fanout_ee07343186f345f1ae54da1ed67c0fd5 0 l3_agent 0 conductor_fanout_a624520fb9584b63b857d02e2af6fbb3 0 scheduler_fanout_7ceb912850054ac4b8ef72456b307244 0 scheduler_fanout_dbf1f1c1af394815b8adb07258a36e82 0 reply_c395cbc019b14012b223cba4a6a1fa3b 0 cinder-volume.node2@ceph_fanout_3604cfb573664ffd8ee7fcbf1ea97f20 0 compute.node1 0 q-agent-notifier-l2population-update.controller 0 q-agent-notifier-binding-deactivate.node1 0 reply_cbefdb394e2e4d54a33ecb6be428edf4 0 reply_9d4ce6a302274e8c9ec32a6054ff8843 0 neutron-vo-QosPolicy-1.7_fanout_4a9fb7ca423f4546a795336440db7a4a 0 q-agent-notifier-security_group-update.node3 0 reply_59c0939282504e43895fb231a6918c7c 0 q-reports-plugin 0 consoleauth_fanout_83a5253d7f174a7fb38f2f23b2d4229d 0 q-agent-notifier-binding-deactivate_fanout_2c436b3fee8d4064a54bcafd054317b3 0 neutron-vo-QosPolicy-1.7 0 q-agent-notifier-port-update 0 cinder-volume.node2@ceph-ssd_fanout_27c556750dcf4613b0ab406924c8118e 0 scheduler 0 neutron-vo-SubPort-1.0 0
院长技术
2020/06/15
9920
OpenStack命令查看安全组规则的详细信息
查看安全组规则列表 [root@controller ~]# openstack security group rule list ID IP Protocol IP Range Port Range Remote Security Group Security Group 02511b0c-1241-4f57-9960-d4f5b50d6939 None None None 1f24ec9a-b27e-448e-b43a-140c62353f3d 03b00c5b-b41f-49a0-bf7b-25c2
院长技术
2020/06/13
2.4K0
走进Java接口测试之简单快速的Mock Server Moco
在上文走进Java接口测试之Mock(概念篇)中,我们介绍 Mock 的基本概念,本文我们将详细介绍其中一个快速简单Mock Server Moco。
高楼Zee
2019/07/17
3.5K0
走进Java接口测试之简单快速的Mock Server Moco
​prometheus中使用python手写webhook完成告警
prometheus我们都知道它是最近几年特别火的一个开源的监控工具,原生支持kubernetes,如果你使用的是kubernetes集群,那么使用prometheus将会是非常方便的,而且prometheus也提供了报警工具alertmanager,实际上在prometheus的架构中,告警能力是单独的一部分,主要是通过自定义一堆的rule即告警规则,来周期性的对告警规则进行计算,并且会根据设置的报警触发条件,如果满足,就会进行告警,也就是会向alertmanager发送告警信息,进而由alertmanager进行告警。
dogfei
2021/01/30
5.1K1
​prometheus中使用python手写webhook完成告警
Python 字典(Dictionary)
Python 字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示: d = {key1 : value1, key2 : value2 } 键(key)必须是唯一的,但值(value)则可以更改。 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。 一个简单的字典实例: dic = {'name':'zhang', 'age':'28
老七Linux
2018/05/09
2.5K0
Openstack运维常见问题记录
dashboard 网络页面报错 Invalid service catalog service: network
后端云
2018/10/24
14.5K0
CMS指纹字典大全[通俗易懂]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
4.8K0
Docker | 常用命令——排错很有帮助
众所周知,docker 排查问题相较而言是困难的。因此,熟知一些常用命令对我们快速的排查定位问题是非常有帮助的。下面让我们一起来学习一下吧👇 1、显示docker的系统信息 docker info [root@xiao docker]# docker info Client: Context: default Debug Mode: false Plugins: app: Docker App (Docker Inc., v0.9.1-beta3) buildx: Build wi
甜点cc
2022/11/16
4470
Docker | 常用命令——排错很有帮助
Python实战之字符串和文本处理
「 傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波」
山河已无恙
2023/01/30
1.2K0
芯链第1课 如何在Ubuntu64位系统下搭建HPB开发环境
本文详细讲解如何在Ubuntu 64位虚拟机上搭建HPB开发环境,并给出了遇到的各种问题的解决方法。主要包括: (1)下载HPB版本并编译; (2)创建账号和创始区块 (3)获取本地hnode信息并重新编译版本 (4)开启启动节点(bootnode)和高性能节点(挖矿) (5)进入本地开发环境 总体分析来看,HPB由于采用BOE硬件导致存在多类节点,本地环境的编译也比较复杂。环境搭建成功后,就可以享受HPB类以太坊环境但具备高TPS性能的优势了。
辉哥
2019/02/22
1K0
芯链第1课 如何在Ubuntu64位系统下搭建HPB开发环境
外包技能--Kubernetes证书过期
重新执行kubectl get node报错error: You must be logged in to the server (Unauthorized)
Godev
2023/08/02
8450
root盘满了怎么办
# 问题 /dev/mapper/centos-root 占用100%导致Tab键用不了,而且docker微服务应用的验证码出不来 [root@summer ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 63G 0 63G 0% /dev tmpfs 63G 24K 63G 1% /dev/shm t
summerking
2022/10/27
1.8K0
相关推荐
[PYTHON]核心编程笔记(15.Py
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验