Python字典的基础操作
作者:一碗周 发布时间:2023-02-27 06:25:18
标签:Python,字典
1、字典的概念
Python
中的字典数据类型和现实中的字典很像,它是以键值对(键和值的组合)的方式把数据组织到一起,可以通过键找到与之对应的值并进行操作。就跟字典中每次字(键)都会有对应的解释(值)一样,每个字和它的解释合在一起就是字典中的一个条目,而字典中通常包含了很多个这样的条目。
2、创建和使用字典
在Python
中创建字典使用{}字面量语法,这跟创建集合的符号是一样的。但是字典的{}中的元素是以键值对的形式存在的,每个元素由:分隔的两个值构成,:前面是键:后面是值,每个对之间用逗号,分割语法格式,
具体语法格式如下:
dict = {key1 : value1, key2 : value2 }
2.1 创建字典
# 创建字典
dict1 = {"姓名": "甜甜"}
print(type(dict1), dict1) # <class 'dict'> {'姓名': '甜甜'}
dict2 = {
"姓名": "甜甜",
"性别": "女",
"年龄": "19"
}
print(dict2) # {'姓名': '甜甜', '性别': '女', '年龄': '19'}
使用dict()
或者是字典的生成式语法来创建字典,示例代码如下:
# 使用dict 创建对象,键不可以加""引号
dict1 = dict(姓名="甜甜", 性别="女", 年龄="19")
print(type(dict1), dict1) # <class 'dict'> {'姓名': '甜甜', '性别': '女', '年龄': '19'}
list1 = ["姓名", "性别", "年龄"]
list2 = ["甜甜", "女", "19"]
# zip()函数将对象中对应的元素打包成一个个元组,返回由这些元组组成的对象
dict2 = dict(zip(list1, list2))
print(dict2) # {'姓名': '甜甜', '性别': '女', '年龄': '19'}
# 使用生成列创建字典
dict3 = {x: x ** 3 for x in range(6)}
print(dict3) # {0: 0, 1: 1, 2: 8, 3: 27, 4: 64, 5: 125}
可以使用len(dict)
得到字典元素个数,即键的总数
for循环也只能对键有效
dict1 = {'姓名': '甜甜', '性别': '女', '年龄': '19'}
print(len(dict1)) # 3
for ch in dict1:
print(ch)
'''
姓名
性别
年龄
'''
3、字典的运算
对于字典来说,成员运算和索引(字典的索引是键值对中的键)运算是尤为重要的,前者可以判断指定的键在不在字典中,后者可以得对应的值,或对其进行修改或者新加。字典中的键必须是不变类型,例如整数(int
)、浮点数(float
)、字符串(str
)、元组(tuple
)等类型的值。字典本身也是可变类型
示例代码:
dict1 = {'姓名': '甜甜', '性别': '女', '年龄': '19'}
# 成员运算
print("姓名" in dict1, "性别" not in dict1) # True False
# 先判断在修改
if "姓名" in dict1:
dict1["姓名"] = '王甜甜'
print(dict1) # {'姓名': '王甜甜', '性别': '女', '年龄': '19'}
# 通过索引为dict1 增加数据
dict1["爱好"] = "旅游"
print("爱好" in dict1) # True
# 对字典的键进行循环并通索引运算获取键对应的值
for key in dict1:
print(f'{key}: {dict1[key]}')
'''
姓名: 王甜甜
性别: 女
年龄: 19
爱好: 旅游
'''
注意:在通过索引运算获取字典中的值时,如指定的键没有在字典中,将会引发KeyError异常
3.1 字典的方法
字典的方法都是对键值对进行相关操作:
# 字典的嵌套
students = {
10001: {"name": "小明", "sex": "男", "age": 18},
10002: {"name": "小红", "sex": "女", "age": 16},
10003: {"name": "小白", "sex": "女", "age": 19},
10004: {"name": "小周", "sex": "男", "age": 20}
}
# 使用get方法通过键获取对应的值,如果取不到是返回的默认值(默认为None)
print(students.get(10002)) # {'name': '小红', 'sex': '女', 'age': 16}
print(students.get(10005)) # None
print(students.get(10005, "没有这个学生")) # 没有这个学生
# 获取字典中所有的键
print(students.keys()) # dict_keys([10001, 10002, 10003, 10004])
# 获取字典中所有的值
print(students.values()) # dict_values([{...}, {...}, {...}, {...}])
# 获取字典中所有的键值对
# dict_items([(10001, {...}), (10002, {....}), (10003, {...}), (10004, {...})])
print(students.items())
# 对字典中所有的键值对进行循环遍历
for key, value in students.items():
print(key, '--->', value)
# 使用pop方法通过键删除对应的键值对并返回该值
stu1 = students.pop(10002)
print(stu1) # {'name': '小红', 'sex': '女', 'age': 16}
print(len(students)) # 3
# 如果删除的不在字典中,会引发KeyError异常
# stu2 = students.pop(10005) # KeyError: 10005
# 使用popitem方法删除字典中最后一组键值对并返回对应的二元组
# 如果字典中没有元素,调用该方法将引发KeyError异常
key, value = students.popitem()
print(key, value) # 10004 {'name': '小周', 'sex': '男', 'age': 20}
# setdefault可以更新字典中的键对应的值或向字典中存入新的键值对
# setdefault方法的第一个参数是键,第二个参数是键对应的值
# 如果这个键在字典中存在,更新这个键之后会返回原来与这个键对应的值
# 如果这个键在字典中不存在,方法将返回第二个参数的值,默认为None
result = students.setdefault(10005, {"name": "小绿", "sex": "女", "age": 18})
print(result) # {'name': '小绿', 'sex': '女', 'age': 18}
print(students) # {10001: {...}, (10003, {...}), 10005: {...}}
# 使用update更新字典元素,相同的键会用新值覆盖掉旧值,不同的键会添加到字典中
others = {
10005: {"name": "小南", "sex": "男", "age": 19},
10006: {"name": "小北", "sex": "男", "age": 19},
10007: {"name": "小冬", "sex": "男", "age": 19}
}
students.update(others)
# {10001: {...}, 10003: {...}, 10005: {...}, 10006: {...}, 10007: {...}}
print(students)
来源:https://juejin.cn/post/7022995510562652167


猜你喜欢
- 在图片处理中,霍夫变换主要是用来检测图片中的几何形状,包括直线、圆、椭圆等。在skimage中,霍夫变换是放在tranform模块内,本篇主
- 经过dom层层注释缩小反馈终于找到问题所在。问题经过我在弹起弹窗的时候,设置了popupVisible为true然后触发了vue的updat
- 先看看CSS框架的利与弊前段时间一直在讨论CSS框架。很多朋友看了那三篇文章后提了不少自己意见。特别是一位北京的朋友A君,他有一个小的团体,
- 1、主题如何使用Pycahrm内置终端以及远程SSH工具。2、准备工作Pycharm版本为3.0或更高连接SSH服务器3、使用SSH客户端4
- 上篇文章分享了windows下载mysql5.7压缩包配置安装mysql后续可以选择①在本地创建一个数据库,使用navicat工具导出远程测
- 添加事件禁止选择、拖拽、右键(简单的禁止用户保存图片,但无法阻止用户打开控制台查看,或是直接抓包)将之转换为 canvas(让浏览器认为不是
- 你完成了你的品牌新的应用程序,一切工作就像一个魅力。用户来使用你的网络。每个人是幸福的。 然后,突然间,一个大爆发的用户杀死你的MySQL服
- 查询一天:select * from table where to_days(column_time) = to_days(now());s
- 问题描述我有一个用于模型训练的DataFrame如下图所示:其中的country、province、city、county四列其实是位置信息
- 废话不多说了,直奔主题了。mysql的四种启动方式:1、mysqld启动mysql服务器:./mysqld --defaults-file=
- 一些杀毒软件经常会把某些asp文件当成病毒删除,如卡巴斯基杀毒软件就经常把网页中有Microsoft.XMLHTTP 的当作病毒,有时简直防
- 一、安装写出许多有趣的可视化东西也可以画出很多奇妙的图案pip install turtule二、画布画布就是turtle为我们展开用于绘图
- 通常,在完成了一件网页设计后,设计师的无知都会显露无遗而备受指责。他们把创建网页代码的繁重工作都留给了程序员们。这种现象不只出现在网络开发行
- 一、io包中接口的好处和优势1.1拷贝数据的函数io.Copy(dst Writer, src Reader)io.CopyBuffer(d
- 区块链包含彼此链接的区块列表.要存储整个列表,我们将创建一个名为TPCoins : 的列表变量;TPCoins = []我们还将编写一个名为
- 之前用Crystal做了一个数字转English Word的Formula刚刚心血来潮, 大半个晚上写了JS版本的数字转换, 由于JS的Bu
- 1,flask中内置的过滤器模板中常用方法:{#过滤器调用方式{{变量|过滤器名称}} #} <!-- safe过滤器,可
- goland leetcode 插件安装可以提高刷题效率,对于学习算法的同学是个不错的选择安装使用步骤:安装插件:a. 左上角Goland
- 大家好,今天分享一个实用的办公脚本:将多个PDF合并为一个PDF,例如我手上现在有如下3个PDF分册,需要整合成一个完整的PDF如果换成你操
- 使用微信获取地址信息是和微信支付一道申请的,微信支付申请通过,就可以使用该功能。微信商城中,使用微信支付获取用户的收货地址,可以省略用户输入