Python字典类型

目录

目标

版本

官方文档

简介

实战

创建

循环

常用方法

目标

        掌握字典类型的使用方法,包括:创建、循环、常用方法等操作。


版本

        Python 3.12.0


官方文档

Mapping Types — dicticon-default.png?t=N7T8https://docs.python.org/3/library/stdtypes.html#mapping-types-dict


简介

官方定义

Mapping Types — dict

A mapping object maps hashable values to arbitrary objects. Mappings are mutable objects. There is currently only one standard mapping type, the dictionary. (For other containers see the built-in list, set, and tuple classes, and the collections module.)

A dictionary’s keys are almost arbitrary values. Values that are not hashable, that is, values containing lists, dictionaries or other mutable types (that are compared by value rather than by object identity) may not be used as keys. Values that compare equal (such as 11.0, and True) can be used interchangeably to index the same dictionary entry.

译文

Python中仅有一种标准的映射类型,即字典(dictionary)类型。

不可变数据类型才可以作为字典的键(key)。比如:

  1. 数字
  2. 字符串
  3. 元组
  4. 布尔值
  5. 不可变集合(frozenset)
  6. 枚举类型
  7. 用户自定义的不可变类型

分析

字典数据类型是键值对的形式,这与java中的HashMap很相似


实战

创建

官方定义

Dictionaries can be created by several means:

  • Use a comma-separated list of key: value pairs within braces: {'jack': 4098, 'sjoerd': 4127} or {4098: 'jack', 4127: 'sjoerd'}

  • Use a dict comprehension: {}{x: x ** 2 for x in range(10)}

  • Use the type constructor: dict()dict([('foo', 100), ('bar', 200)])dict(foo=100, bar=200)

这里给出了字典的三种创建方法:

方法一(用大括号创建)

myDict={"name":"zhangsan","age":12,"sex":1,False:"yes",True:"no",frozenset(["a","b","c"]):"Hello World."}
#输出:{'name': 'zhangsan', 'age': 12, 'sex': 1, False: 'yes', True: 'no', frozenset({'a', 'b', 'c'}): 'Hello World.'}
print(myDict)

方法二(用字典推导式创建)

fruitList = ['apple', 'banana', 'orange', 'kiwi', 'grape']
#水果名称作key,水果单词长度作value
fruitDict={key:len(key) for key in fruitList}
#输出:{'name': 'zhangsan', 'age': 12, 'sex': 1, False: 'yes', True: 'no', frozenset({'a', 'b', 'c'}): 'Hello World.'}
print(fruitDict)

方法三(用构造方法创建)

用关键字作key创建字典

myDict=dict(name="Tom",age=12,sex=1)
#输出:{'name': 'Tom', 'age': 12, 'sex': 1}
print(myDict)

用可迭代对象创建字典

myDict=dict([("name","Tom"),("age",12),("sex",1)])
#输出:{'name': 'Tom', 'age': 12, 'sex': 1}
print(myDict)

混合模式创建

myDict=dict([("name","Tom"),("age",12)],sex=1)
#输出:{'name': 'Tom', 'age': 12, 'sex': 1}
print(myDict)

循环

遍历字典的key

#方法一
myDict=dict(name="Tom",age=12,sex=1)
#输出:name age sex 
for key in myDict:print(key,end=" ")#方法二
myDict=dict(name="Tom",age=12,sex=1)
#输出:name age sex
for key in iter(myDict):print(key,end=" ")#方法三
myDict=dict(name="Tom",age=12,sex=1)
#输出:name age sex
for key in myDict.keys():print(key,end=" ")

反向遍历字典中的key

myDict={"name":"Tom","age":12,"sex":1}
#输出:sex age name 
for key in reversed(myDict):print(key,end=" ")

遍历字典的value

myDict=dict(name="Tom",age=12,sex=1)
#输出:Tom 12 1 
for value in myDict.values():print(value,end=" ")

遍历字典的键值对

myDict=dict(name="Tom",age=12,sex=1)
"""
输出:
name = Tom
age = 12
sex = 1
"""
for key, value in myDict.items():print(key,"=",value)

使用视图对象循环

myDict=dict(name="Tom",age=12,sex=1)
#输出:dict_items([('name', 'Tom'), ('age', 12), ('sex', 1)]) <class 'dict_items'>
#dict_items是字典视图对象的类型
print(myDict.items(),type(myDict.items()))
"""
输出:
('name', 'Tom') <class 'tuple'>
('age', 12) <class 'tuple'>
('sex', 1) <class 'tuple'>
"""
for item in myDict.items():print(item,type(item))

常用方法

以集合的形式获取字典的所有key

myDict={"name":"Tom","age":12,"sex":1}
keyList=list(myDict)
#输出:['name', 'age', 'sex'] <class 'list'>
print(keyList,type(keyList))

获取键值对数量

myDict={"name":"Tom","age":12,"sex":1}
dictLen=len(myDict)
#输出:3 <class 'int'>
print(dictLen,type(dictLen))

根据key获取value

class MyDict(dict):def __missing__(self, key):return "{}不存在".format(key)
#用字典的字类MyDict的构造方法创建字典
yourDict=MyDict(name="Tom",age=12,sex=1)
#输出:<class '__main__.MyDict'>
print(type(yourDict))
#输出:Tom
print(yourDict["name"])
#输出:birthday不存在
print(yourDict["birthday"])

根据key设置value

myDict={"name":"Tom","age":12,"sex":1}
myDict["name"]="Green"
#输出:{'name': 'Green', 'age': 12, 'sex': 1}
print(myDict)

根据key删除元素

myDict={"name":"Tom","age":12,"sex":1}
del myDict["name"]
#输出:{'age': 12, 'sex': 1}
print(myDict)

根据key删除元素并返回value

myDict={"name":"Tom","age":12,"sex":1}
name=myDict.pop("name");
#输出:Tom
print(name)birthday=myDict.pop("birthday","没有这个key");
#输出:没有这个key
print(birthday)birthday=myDict.pop("birthday");
#报错
print(birthday)

是否包含某个key

myDict={"name":"Tom","age":12,"sex":1}
#输出:True
print("name" in myDict)

是否不包含某个key

myDict={"name":"Tom","age":12,"sex":1}
#输出:True
print("name" not in myDict)

清空字典

myDict={"name":"Tom","age":12,"sex":1}
myDict.clear()
#输出:{}
print(myDict)

拷贝字典(浅拷贝)

myDict={"name":"Tom","age":12,"sex":1}
yourDict=myDict.copy()
#输出:不同的id
print(id(yourDict),id(myDict))
#输出:相同的id
print(id(yourDict.get("name")),id(myDict.get("name")))

移除并返回字典中的一个元素,返回对象是元组类型。

Python3.7版本开始,popitem方法按照后进先出,之前的版本随机返回。

myDict={"name":"Tom","age":12,"sex":1}
oneTuple=myDict.popitem()
#输出:('sex', 1) <class 'tuple'>
print(oneTuple,type(oneTuple))twoTuple=myDict.popitem()
#输出:('age', 12) <class 'tuple'>
print(twoTuple,type(twoTuple))threeTuple=myDict.popitem()
#输出:('name', 'Tom') <class 'tuple'>
print(threeTuple,type(threeTuple))print(myDict)
fourTuple=myDict.popitem()
#报错,因为此时myDict里没有元素了。
print(fourTuple,type(fourTuple))

如果字典中没有这个key则往字典插入数据,如果字典中有这个key,则不修改数据。默认值是可选参数,默认为None。

myDict={"name":"Tom","age":12,"sex":1}
myDict.setdefault("name","Jack")
#输出:{'name': 'Tom', 'age': 12, 'sex': 1}
print(myDict)myDict.setdefault("birthday","1999-09-09")
#输出:{'name': 'Tom', 'age': 12, 'sex': 1, 'birthday': '1999-09-09'}
print(myDict)myDict.setdefault("occupation")
#输出:{'name': 'Tom', 'age': 12, 'sex': 1, 'birthday': '1999-09-09', 'occupation': None}
print(myDict)myDict.setdefault("name")
#输出:{'name': 'Tom', 'age': 12, 'sex': 1, 'birthday': '1999-09-09', 'occupation': None}
print(myDict)

批量更新数据

#根据字典修改数据
myDict={"name":"Tom","age":12,"sex":1}
yourDict={"name":"Jack","age":20,"birthday":"1999-09-09"}
myDict.update(yourDict)
#输出:{'name': 'Jack', 'age': 20, 'sex': 1, 'birthday': '1999-09-09'}
print(myDict)#根据关键词修改数据
myDict.update(name="Jack",age=20,birthday="1990-09-09")
#输出:{'name': 'Jack', 'age': 20, 'sex': 1, 'birthday': '1990-09-09'}
print(myDict)#根据迭代对象修改数据
myList=[("work","farmer"),("name","Green")]
myDict.update(myList)
#输出:{'name': 'Green', 'age': 20, 'sex': 1, 'birthday': '1999-09-09', 'work': 'farmer'}
print(myDict)

根据优先级合并两个字典产生新字典

Python3.9版本中引入的字典合并操作符。

#根据字典修改数据
myDict={"name":"Tom","age":12,"sex":1}
yourDict={"name":"Jack","age":20,"birthday":"1999-09-09","sex":None}
otherDict=myDict | yourDict
#输出:<class 'dict'>
print(type(otherDict))#输出:{'name': 'Jack', 'age': 20, 'sex': 1, 'birthday': '1999-09-09'}
#分析:yourDict在右边,所以如果key相同,取yourDict的value
print(otherDict)

根据优先级修改两个字典产生新字典

Python3.9版本中引入的字典合并操作符。

#根据字典修改数据
myDict={"name":"Tom","age":12,"sex":1}
yourDict={"name":"Jack","age":20,"birthday":"1999-09-09","sex":None}
myDict |= yourDict
#输出:<class 'dict'>
print(type(myDict))#输出:{'name': 'Jack', 'age': 20, 'sex': None, 'birthday': '1999-09-09'}
#分析:yourDict在右边,所以如果key相同,取yourDict的value
print(myDict)

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

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

相关文章

Halcon参考手册目标检测和实例分割知识总结

1.1 目标检测原理介 目标检测&#xff1a;我们希望找到图像中的不同实例并将它们分配给某一个类别。实例可以部分重叠&#xff0c;但仍然可以区分为不同的实例。如图(1)所示&#xff0c;在输入图像中找到三个实例并将其分配给某一个类别。 图(1)目标检测示例 实例分割是目标检…

敌方移动发射[java坦克大战]

1.首先要确保判断如果敌人坦克存活并且敌人子弹集合等于0了&#xff0c;就根据坦克方向创建一颗子弹&#xff0c;放入到shots集合&#xff0c;并启动。(逻辑&#xff1a;发射子弹后&#xff0c;敌人坦克向前移动一段距离后转向&#xff0c;敌人坦克仍然存活并且刚发射的子弹消亡…

C++-设计一个特殊类

目录 一.设计一个类&#xff0c;不能被拷贝 二.设计一个类只能在堆上创建对象 三.设计一个类只能在栈上创建对象 四. 请设计一个类&#xff0c;不能被继承 五.请设计一个类&#xff0c;只能创建一个对象(单例模式) 1.单例模式&#xff1a; 2. 饿汉模式 一.设计一个类&#x…

代码浅析DLIO(四)---位姿更新

0. 简介 我们刚刚了解过DLIO的整个流程&#xff0c;我们发现相比于Point-LIO而言&#xff0c;这个方法更适合我们去学习理解&#xff0c;同时官方给出的结果来看DLIO的结果明显好于现在的主流方法&#xff0c;当然指的一提的是&#xff0c;这个DLIO是必须需要六轴IMU的&#x…

[WP] ISCTF2023 Web 部分题解

圣杯战争!!! 反序列化伪协议读取 where_is_the_flag 环境变量根目录当前目录 绕进你的心里 利用正则最大回溯绕过 easy_website or select 用双写绕过 空格用/**/绕&#xff0c;报错注入 wafr codesystem(ca\t /f*) webinclude 扫描得到index.bak备份文件打开为加密的代码 写…

1998-2021年全国各区县PM2.5平均浓度数据

1998-2021年全国各区县PM2.5平均浓度数据 1、时间&#xff1a;1998-2021年 2、指标&#xff1a;省、省代码、市、市代码、县代码、县、年份、均值、总和、最小值、最大值、标准差 3、来源&#xff1a;Washington university Atmospheric Composition Analysis Group 4、范围…

2023年第十二届数学建模国际赛小美赛C题雪崩防范求解分析

2023年第十二届数学建模国际赛小美赛 C题 雪崩防范 原题再现&#xff1a; 雪崩是极其危险的现象。现在&#xff0c;我们对雪崩是如何形成的已经有了很好的理解&#xff0c;但是我们还不能详细地预测雪崩发生的原因、时间和地点。村庄和道路可以通过各种方式防止雪崩。避免在脆…

Git Hooks实战:提交前检查修改文件中是否包含调试代码

说在前面 不知道大家有没有遇到这样一种情况&#xff0c;平时在写代码调试时有时候会使用到debugger&#xff0c;可能大部分时间在提交代码前会记得把debugger先删除&#xff0c;但可能也会存在将debugger提交上去的情况&#xff0c;那我们该怎么防止出现这种情况呢&#xff1…

css如何设置文本添加下划线

css文本添加下划线 text-decoration: underline;text-decoration相关属性参数 参数描述none默认。定义标准的文本。underline定义文本下的一条线。overline定义文本上的一条线。line-through定义穿过文本下的一条线。blink定义闪烁的文本。inherit规定应该从父元素继承 text-…

享元设计模式

package com.jmj.pattern.flyweight;public abstract class AbstractBox {//获取图形的方法public abstract String getShape();//显示图形及颜色public void diplay(String color){System.out.println("方块形状:"getShape()",颜色:"color);}}package com…

基于SpringBoot实现SSMP整合

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

23.Python 图形化界面编程

目录 1.认识GUI和使用tkinter2.使用组件2.1 标签2.2 按钮2.3 文本框2.4 单选按钮和复选按钮2.5 菜单和消息2.6 列表框2.7 滚动条2.8 框架2.9 画布 3. 组件布局4.事件处理 1.认识GUI和使用tkinter 人机交互是从人努力适应计算机&#xff0c;到计算机不断适应人的发展过程&#…

[ 蓝桥杯Web真题 ]-年度明星项目

目录 引入 介绍 准备 目标 效果 规定 思路 知识补充 解答参考 引入 hello&#xff0c;大家好&#xff01;我注意到了之前发的一篇蓝桥杯Web应用开发的文章是关注度最高的&#xff0c;可能大部分关注我的小伙伴对蓝桥杯Web应用开发比较感兴趣&#xff0c;或者想要参加…

Flink(九)【时间语义与水位线】

前言 2023-12-02-20:05&#xff0c;终于写完啦&#xff0c;最近状态不错。刚写完又收到了她的消息哈哈哈哈&#xff0c;开心。 再去全力打拼一次&#xff0c;奋战一场&#xff0c;就算最后打了败仗也无所谓&#xff0c;至少你留下了足迹。 《解忧杂货店》 1、时间语义 …

出口贸易媒体发稿7种方法提升转化率的秘密武器解析-华媒舍

出口贸易成为了许多企业发展的重要方向。在这个竞争激烈的市场中&#xff0c;如何让自己的产品脱颖而出&#xff0c;吸引更多客户并提高转化率&#xff0c;成为了每个企业家都面临的挑战。本文将向大家介绍7种提升转化率的秘密武器&#xff1a;出口贸易媒体发稿方法。 1. 出口贸…

LeetCode刷题---合并两个有序链表

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏&#xff1a;http://t.csdnimg.cn/ZxuNL http://t.csdnimg.cn/c9twt 前言&#xff1a;这个专栏主要讲述递归递归、搜索与回溯算法&#xff0c;所以下面题目主要也是这些算法做的 我讲述…

基于深度学习的肺炎CT图像检测诊断系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习在肺炎CT图像检测诊断方面具有广泛的应用前景。以下是关于肺炎CT图像检测诊断系统的介绍&#xff1a; 任务…

基于PHP的高中生物学习平台

有需要请加文章底部Q哦 可远程调试 基于PHP的高中生物学习平台 一 介绍 此高中生物学习平台基于原生PHP开发&#xff0c;数据库mysql。系统角色分为用户和管理员。(附带参考设计文档) 技术栈&#xff1a;phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/注销 2 个人中心 …

人工智能时代:AIGC的横空出世

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 什么是AIGC?二. AIGC的主要特征2.1 文本生成2.2 图像生成2.3 语音生成2.4 视…

蓝桥杯第198题 人物相关性分析 C++ 模拟 字符串 双指针

题目 思路和解题方法 程序首先定义了一个函数check&#xff0c;用于判断一个字符是否为字母。接下来&#xff0c;程序读取输入的整数k和一行字符串str。定义了两个空的向量a和b&#xff0c;用于存储满足条件的子串的起始位置。使用for循环遍历字符串str的每个字符&#xff0c;检…