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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

绝地求生:成长型皮肤异色定价是否有些夸张?

大家好&#xff0c;我闲游盒小盒子&#xff01; 自从26.2更新上架回归的黑市中四款成长型皮肤以后&#xff0c;能看到社区里很多玩家都分享抽中了自己心仪的成长型皮肤。 但是对于异色很少有人去实装&#xff0c;大多数玩家都是选择去分解异色换取五张图纸然后追求升级原皮等级…

【PyQt】(自定义类)阴影遮罩

写了一个感觉有些用的小玩具。 用于给控件添加阴影遮罩(强调主控件的同时屏蔽其余控件的点击) 自定义阴影遮罩Mask&#xff1a; from PyQt5.QtCore import QPoint,QRect,Qt,QPoint,QSize from PyQt5.QtWidgets import QWidget,QLabel,QPushButton,QVBoxLayout from PyQt5.QtGu…

L型骨牌覆盖问题。

问题&#xff1a;解决一个2k*2k的特殊棋牌上的L型骨牌覆盖问题。 思路&#xff1a; 棋盘覆盖实现的基本方法为分治法 当k0时(1ⅹ1棋盘)&#xff0c;及特殊方格&#xff0c;骨牌数为0 当k >0时&#xff0c;将2kⅹ2k棋盘分割为4个2k-1ⅹ2k-1子棋盘了 特殊方格位于4个较小…

【3D程序软件】SideFX与上海道宁一直为设计师提供程序化 3D动画和视觉效果工具,旨在创造高质量的电影效果

Houdini是一个 从头开始构建的程序系统 使艺术家能够自由工作 创建多次迭代 并与同事快速共享工作流程 Houdini FX为 视觉特效艺术家创作故事片 广告或视频游戏 凭借其基于程序节点的工作流程 Houdini FX可让 您更快地创建更多内容 从而缩短时间并 在所有创意任务中…

制作电脑微信双开快捷方式

一、介绍 电脑下载的微信正常只能打开一个&#xff0c;那有时候需要双开甚至多开微信我们需要怎么操作呢&#xff1f; 我这里就讲一个制作微信双开快捷键方式的办法&#xff0c;争对其他应用也是一样的原理。 二、制作过程 1、右击微信快捷方式 2、点击属性 3、复制目标 …

微服务实战系列之Cache

前言 欢迎来到Cache&#xff08;缓存&#xff09;的世界&#xff01; 自从世界第一台计算机诞生之日起&#xff0c;人们对效率的渴望逐步增强。从CPU到存储&#xff0c;从芯片到内存&#xff0c;一批又一批的先驱以一种孜孜不倦的“工匠”精神&#xff0c;为计算机运行效率的提…

MyBatis-Plus及多数据源入门教程

开发环境配置 JDK 1.8、Maven 3.8.8、 IDEA CE 2023.2、MySQL 8.0.34 框架介绍 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。MyBatis 是一款非常优秀的开源…

快速了解Spring AOP的概念及使用

文章目录 1. AOP概念1.1 什么是AOP&#xff1f;1.2 什么是Spring AOP&#xff1f; 2. Spring AOP的使用2.1 引入Spring AOP依赖2.2 编写AOP程序 3. Spring AOP详解3.1 Spring AOP核心概念1. 切点&#xff08;Pointcut&#xff09;2. 连接点&#xff08;Join Point&#xff09;3…

C++ day37 贪心算法 单调递增的数字 监控二叉树

题目1&#xff1a;738 单调递增的数字 题目链接&#xff1a;单调递增的数字 对题目的理解 返回小于或等于n的最大数字&#xff0c;且数字是单调递增&#xff08;单调递增数字的定义&#xff1a;每个相邻位上的数字满足x<y&#xff09; 贪心算法 注意本题的遍历顺序是从…

【算法刷题】Day7

文章目录 283. 移动零1089. 复写零 283. 移动零 原题链接 看到题目&#xff0c;首先看一下题干的要求&#xff0c;是在原数组内进行操作&#xff0c;平切保持非零元素的相对顺序 这个时候我们看到了示例一&#xff1a; [ 0, 1, 0, 3,12 ] 这个时候输出成为了 [ 1, 3, 12, 0, …

16.spirng源码解析-registerBeanPostProcessors

注册拦截bean创建的bean处理器 此部分实质上是在BeanDefinitions中寻找BeanPostProcessor&#xff0c;之后调用BeanFactory.addBeanPostProcessor方法保存在一个List中&#xff0c;注意添加时仍然有优先级的概念&#xff0c;优先级高的在前面。

内测分发平台是否支持敏捷开发和持续集成?

大家好&#xff0c;我是咕噜-凯撒。敏捷开发和持续集成是软件开发中非常重要的流程和方法。内测分发平台作为应用开发和测试的关键环节需要具备这种能力。下面我简单的介绍一下敏捷开发和持续集成和提供的功能。图片来源&#xff1a;news.gulufenfa.com 敏捷开发是一种迭代、协…

在 The Sandbox 设置总部,SCB 10X 和 T-POP 为 4EVE 元宇宙音乐会揭幕

协作学习为全球粉丝提供了无限的可能性&#xff0c;让他们通过革命性的元宇宙体验沉浸在泰国流行文化中。 作为 SCBX 集团背后的创新力量&#xff0c;SCB 10X 很高兴宣布与 T-POP Incorporation 展开开创性合作&#xff0c;T-POP Incorporation 是泰国流行文化在全球舞台上的领…

leetcode算法之字符串

目录 1.最长公共前缀2.最长回文子串3.二进制求和4.字符串相乘 1.最长公共前缀 最长公共前缀 class Solution { public:string longestCommonPrefix(vector<string>& strs) {//法一&#xff1a;两两比较string ret strs[0];for(int i1;i<strs.size();i){ret f…

Ps:子路径的上下排列以及对齐与分布

不论是一个形状图层&#xff08;或图层的矢量蒙版&#xff09;上的多个形状还是同一路径层上多个路径&#xff0c;只要对应“路径”面板的一个路径层&#xff0c;可以将这些路径称为该路径层的“子路径”&#xff0c;也称为“组件”。 当一个路径层上有两个以上的子路径时&…

量子力学:科技前沿的探索与挑战

量子力学:科技前沿的探索与挑战 一、量子力学的魅力与挑战 量子力学是研究微观粒子如电子、光子等行为的物理学分支。与经典力学不同,量子力学描述了一个充满不确定性和概率性的世界。在这个世界里,粒子可以同时处于多个状态,只有当我们对其进行测量时,它才会“选择”一个…

【Python基础】爬取豆瓣电影Top250+爬取知乎专栏文章标题

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

xcode opencv

1、导入报错 Undefined symbols: linker command failed with exit code 1 (use -v to see invocation) 直接添加如下图内容即可

Spark_Spark高阶特性

wscg filter导致断链 Codegen 向量化 simdjson Orc Parquet 支持批量读取 spark本身对parquet支持比较好&#xff0c;因为parquet

服务器中深度学习环境的配置

安装流程 11.17 日&#xff0c;周末去高校参加学术会议&#xff0c;起因&#xff0c; 由于使用了某高校内的公共有线网络&#xff0c; 远程连接服务器后&#xff0c;黑客利用 ssh 开放的 22 端口&#xff0c; 篡改了主机的配置&#xff0c; 使得只要一连上网络&#xff0c; 服…