python字典应用

news2024/12/25 13:42:49

python字典应用


文章目录

  • python字典应用
  • 一、实验目的
  • 二、实验原理
  • 三、实验环境
  • 四、实验内容
  • 五、实验步骤
    • 字典的综合案例
    • 使用collections模块的defaultdict类来实现创建字典。
    • 拓展知识一:内置函数globals()和locals()
    • 拓展知识二:有序字典 collections.OrderedDict
    • 拓展知识三:内置函数sorted()
    • 拓展知识四:Python支持字典推导式快速生成符合特定条件的字典
    • 序列解包


一、实验目的

掌握字典的应用

二、实验原理

字典是包含若干“键:值”元素的无序可变序列,字典中每个元素包含“键”和“值”两部分,表示一种映射或对应关系。定义字典时,每个元素的键和值用冒号分割开,不通风元素之间用逗号分隔,所有的元素放在一对大括号“{”和“}”中。

字典中的“键”可以是Python中任意不可变数据,如整数、实数、复数、字符串、元组等,但是不能使用列表、集合、字典或其他可变类型作为字典的“键”。另外,字典中“键”不允许重复,而“值”是可以重复的。

三、实验环境

Python 3.6以上

IPython

PyCharm

四、实验内容

字典应用

五、实验步骤

字典的综合案例

统计分析在很多领域都有重要的用途,如密码破解,图像直方图等。下面的代码首先生成包含1000个随机字符的字符串,然后统计每个字符出现的次数。

#导入模块
import string
import random
x=string.ascii_letters+string.digits+string.punctuation
x
#生成包含1000个随机字符的列表
y=[random.choice(x) for i in range(1000)]
#把列表中的字符连接成字符串
z=''.join(y)
d=dict()
for ch in z:
    #修改每个字符的词频
    d[ch]=d.get(ch,0)+1

print(d)

在这里插入图片描述

使用collections模块的defaultdict类来实现创建字典。

import string
import random
x=string.ascii_letters+string.digits+string.punctuation
y=[random.choice(x) for i in range(1000)]
z=''.join(y)
from collections import defaultdict
#所有值默认为0
frequences=defaultdict(int)
frequences
for item in z:
    #修改每个字符的频次
    frequences[item]+=1

#输出frequences字典的元素
frequences.items()

在这里插入图片描述

使用collections模块的Counter类,快速实现“统计字符串中每个字符出现次数”这个功能。

import string
import random
x=string.ascii_letters+string.digits+string.punctuation
y=[random.choice(x) for i in range(1000)]
z=''.join(y)
from collections import defaultdict
#所有值默认为0
frequences=defaultdict(int)
from collections import Counter
frequences=Counter(z)
frequences.items()
#返回出现次数最多的1个字符及其频率
frequences.most_common(1)
#返回出现次数最多的3个字符及其频率
frequences.most_common(3)

在这里插入图片描述

拓展知识一:内置函数globals()和locals()

内置函数globals()和locals()分别返回包含当前作用域内所有全局变量和局部变量的名称及值的字典

#全局变量
a=(1,2,3,4)
#全局变量
b='hello world.'
def demo():
    #局部变量
    a=3
    #局部变量
    b=[1,2,3]
    print('locals:',locals())
    print('globals:',globals())

demo()

在这里插入图片描述

拓展知识二:有序字典 collections.OrderedDict

有序字典,Python内置字典是无序的,如果需要一个可以记住元素插入顺序的字典,可以使用collections.OrderedDict.

import collections
x=collections.OrderedDict()
x['a']=3
x['b']=5
x['c']=8
x

在这里插入图片描述

拓展知识三:内置函数sorted()

内置函数sorted()可以对字典元素进行排序并返回新列表,充分利用key参数可以实现丰富的排序功能。

phonebook={'Linda':'7750','Bob':'9345','Carol':'5834'}
from operator import itemgetter
#按字典的“值”进行排序
sorted(phonebook.items(),key=itemgetter(1))
#按字典的“键”进行排序
sorted(phonebook.items(),key=itemgetter(0))
#按字典的“键”进行排序
sorted(phonebook.items(),key=lambda item:item[0])

在这里插入图片描述

persons=[{'name':'Dong','age':37},{'name':'Zhang','age':40},{'name':'Li','age':50},{'name':'Dong','age':43}]
print(persons)
#使用key来指定排序依据,先按姓名升序排序,姓名相同的年龄降序排序
print(sorted(persons ,key=lambda x:(x['name'],-x['age'])))

在这里插入图片描述

注意:在某一项前面加负号表示降序排序,这一点只适用于数字类型。

拓展知识四:Python支持字典推导式快速生成符合特定条件的字典

{i:str(i) for i in range(1,5)}
x=['A','B','C','D']
y=['a','b','c','d']
{i:j for i,j in zip(x,y)}

在这里插入图片描述

序列解包

在实际开发中,序列解包是非常重要和常用的一个功能,可以使用非常简洁的形式完成复杂的功能,大幅度提高了代码的可读性。

1.使用序列解包对多个变量同时进行赋值

#多个变量同时赋值
x,y,z=1,2,3
v_tuple=(False,3.5,'exp')
(x,y,z)=v_tuple
x,y,z=v_tuple
#使用range对象进行解包
x,y,z=range(3)
#使用迭代对象进行序列解包
x,y,z=map(str,range(3))

在这里插入图片描述

2.序列解包也可以用于列表和字典,但是对字典使用时,默认是对字典“键”进行操作,如果需要对“键:值”对进行操作,需要使用字典的items()方法明确指定。如果需要对字典的“值”进行操作,需要使用字典的values()方法明确指定。

a=[1,2,3]
#列表页支持序列解包
b,c,d=a
b
#sorted函数返回排序后的列表
x,y,z=sorted([1,3,2])
#对字典进行序列解包
s={'a':1,'b':2,'c':3}
b,c,d=s.items()
b
#使用字典时不用太多考虑元素的顺序
b,c,d=s
b
b,c,d=s.values()
print(b,c,d)

在这里插入图片描述

3.使用序列解包可以很方便地同时遍历多个序列。

keys=['a','b','c','d']
values=[1,2,3,4]
for k,v in zip(keys,values):
    print(k,v)

在这里插入图片描述

4.下面代码演示了对内置函数enmerate()返回的迭代对象进行遍历时,序列解包的用法。

x=['a','b','c']
for i,v in enumerate(x):
    print('The value on position{0} is {1}'.format(i,v))

在这里插入图片描述

5.下面对字典的操作也使用到序列解包:

s={'a':1,'b':2,'c':3}
for k,v in s.items():
    #字典中每个元素包含“键”和“值”两部分
    print(k,v)
#序列解包还支持下面的用法
print(*[1,2,3],4,*(5,6))
*range(4),4
{*range(4),4,*(5,6,7)}
{'x':1,**{'y':2}}

在这里插入图片描述

注意:在调用函数时,在实参前面加上一个星号(*)也可以进行序列解包。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/183184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用MyBatis简化JDBC开发?MyBatis持久层框架快速入门

文章目录1. 前言2. JDBC 存在的缺点3. MyBatis 优化4. MyBatis 快速入门5. 总结Java编程基础教程系列1. 前言 JavaEE 企业级 Java 项目中的经典三层架构为表现层,业务层和持久层,使用Java 代码操作数据库属于持久层内容,而 MyBatis 对 JDBC …

Multus k8s网络浅谈

Multus是什么 k8s不提供网络解决方案,提供CNI ( Container Networking Interface )规范,被CNI插件遵守(Flannel, Calico,Multus等,这些是网络方案) Multus 提供了将多个接口添加到pod的功能 Flannel 为每…

实现自己的数据库三

一 前言上篇实现了数据库的持久化,就是一个质的飞跃,虽然代码不复杂,但是对没有这方面经验者来说,还是意思的,下一步就是要完成另外一个飞跃,将存储的数据结构采用B树的形式来保存。在改造之前,…

为什么要设计非公平锁?

背景 公平:排队 非公平:在合适时机插队 非公平还是 ReentrantLock 的默认策略,排队时间不浪费了? 场景 来看这种场景 假如A持有一把锁,B请求这把锁,这时候B被挂起进入阻塞,A释放锁的时候&a…

点与线段的关系

点与线段的关系 对于向量a(x1,y1)和b(x2,y2) 点乘的数学意义:a * b x1x2 y1y2 点乘的几何意义:a * b |a||b|cosQ 这个可以看成是投影关系表达式:cosQ a * b / ( |a||b|) 令r cosQ; 求p点和线段AB的位置关系,可以…

将字符串根据指定的分隔符拆分为元组str.partition()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将字符串根据指定的分隔符拆分为元组 str.partition() 选择题 对于以下python代码最后输出的结果是? string "I Love Python" print("【显示】string.partition(Love)"…

Unity3d 微信小程序(小游戏)项目实现流量主接入功能(含源码)

前言 很早之前编写了Unity导出微信小游戏的博客,也尝试自己做了个Demo上线了,基本没更新过,不过几个月的时间,用户超过了一千,可以开通流量主了,大概率是因为上篇的帖子浏览量大了,扫码体验的人…

Aurora、Chip2chip、Ethernet(二)

摘要:Aurora、Chip2chip、Ethernet共用一个gt时钟的正确的解决方案以及在实际实现以及在实现过程中遇到的其它的问题。 我在实际中遇到的困难如下: 现在需要将三个ip共用一对GT时钟,一个Ethernet IP,一个Ethernet IP&#xff08…

每日学术速递1.29

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1. Compact Transformer Tracker with Correlative Masked Modeling 标题:带有相关掩码建模的紧凑型变压器跟踪器 作者: Zikai Song, Run Luo, Junqing Yu, Y…

GLM国产大模型训练加速:性能最高提升3倍,显存节省1/3,低成本上手

作者|BBuf、谢子鹏、冯文 2017 年,Google 提出了 Transformer 架构,随后 BERT 、GPT、T5等预训练模型不断涌现,并在各项任务中都不断刷新 SOTA 纪录。去年,清华提出了 GLM 模型(https://github.com/THUDM…

一句话说明线程和进程

知识点: 1、一句话说明线程和进程 2、操作系统为什么需要进程 3、为什么要引入线程 4、一图说明线程和进程的关系 一、一句话说明线程和进程 进程:是指⼀个内存中运⾏的应⽤程序,比如QQ、微信、浏览器等;⼀个应⽤程序可以同时运⾏…

CAS 和 Synchronized优化过程以及常见的锁策略

目录 🐑今日良言:追星赶月莫停留,平芜尽处是春山 🐂一、锁策略 🐼二、CAS 🐭三、Synchronized 🐑今日良言:追星赶月莫停留,平芜尽处是春山 🐂一、锁策略 锁策略是实现锁的时候,考虑出现锁竞争了该怎么…

电驱系统电磁兼容基础知识及测试方法

电驱系统电磁兼容基础知识及测试方法 学习参考:驱动视界公众号、百度百科、《电动汽车电机驱动系统EMC研究综述》 1.背景 2.电磁干扰三要素 3.电波暗室与屏蔽室的原理 4.测试方法 5.如何看测试数据 6.工作中需要注意的EMC的几点问题 7.案例 1.背景 汽车工业发展…

docker安装db2

第一步:下载镜像 docker pull ibmcom/db2express-c:latest备注:docker images -a 可以查看已安装镜像; 第二步:启动镜像 docker run -d --name db2 -p 50000:50000 -e DB2INST1_PASSWORD[数据库密码] -e LICENSEaccept ibmcom…

玩转PPT 第1节 PPT制作理念学习笔记

ppt神器islide 第1节 初步接触强大的工具1 PPT大神的课程总结1.1 骨架篇1.2 色彩篇1.3 对齐篇1.4 对比篇1.5 修饰篇1.6 字体篇1.7 素材篇1.8 线条篇1.8.1 可以随意画线条,填充空白1.8.2 在字体上画线条,做成艺术字1.8.3 做对称线条,比如递进三…

Bluesky勒索软件深度技术分析

0 1、 背景介绍 勒索软件作为一种流行的木马,近年来已成为最为常见的安全威胁之一。与其他威胁不同,勒索软件先向受害者表明自己的身份,再通过加密的方式使用户数据资产或计算资源无法正常使用,而恢复数据资产的唯一方法通常是支…

收藏破万,谷歌联手哈佛发布首个炼丹指南:教你科学化「调参」

调参不能只靠直觉,也是一门大学问! 虽然算法工程师往往调侃自己是「调参侠」,但调参这件事可能真没想象中那么简单。 比如,你是不是经常会有疑惑到底该选择哪个优化器?一个batch放多少数据?超参数如何设置…

人工智能英文缩写怎么读,人工智能英文缩写大全

1、人工智能英文缩写是什么? AI。 人工智能,英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术以及应用系统的一门技术科学。“十三五”以来,我国高度重视人工智能的发展,国内科研机构也围绕人工智能…

【Pytorch项目实战】之机器翻译:编码器-解码器、注意力机制AM

文章目录机器翻译 - 中英文翻译算法一:编码器-解码器(Encoder - Decoder)算法二:注意力机制(Attention Model,AM)2.1为何要引入注意力机制?2.2注意力机制的语义向量表示C计算2.3每个…

2023年首更,警惕6本SCISSCI期刊被剔除

2023年1月17日,Web of Science核心期刊目录首次更新。此次SCIE & SSCI期刊目录更新,与上次更新(2022年12月)相比,共有6本期刊被剔除出SCIE & SSCI期刊目录,详情如下: 公众号“Unionpub…