文章目录
- [0x0 前言](#0x0 前言)
- [0x1 字典 (Dictionary)](#0x1 字典 (Dictionary))
-
- [0x01 访问字典里的值](#0x01 访问字典里的值)
- [0x02 修改字典](#0x02 修改字典)
- [0x03 删除字典元素](#0x03 删除字典元素)
- [0x04 判断字典是否包含指定key,用in或not in 运算符](#0x04 判断字典是否包含指定key,用in或not in 运算符)
- [0x2 字典键的特性](#0x2 字典键的特性)
- [0x3 字典内置函数&方法](#0x3 字典内置函数&方法)
- [0x4 使用格式化字符串](#0x4 使用格式化字符串)
0x0 前言
python没有系统学过,走一步学一点吧,这次查缺补漏的点是dict;
文献参考:
菜鸟教程
ChatGPT
https://c.biancheng.net/view/2212.html
维基百科
0x1 字典 (Dictionary)
字典是Python提供的一种常用的数据结构 ,它用于存放具有映射关系的数据。
字典中相当于存放了俩组数据,其中一组是关键数据被称为key,另外一组可以用key来访问,被称为value,形象的看 key和value的关系如下图:
source:https://c.biancheng.net/view/2212.html
字典的每个键值 key:value 对 用冒号 : 分割 ,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中,格式如下:
typescript
d = {key1 : value1, key2 : value2 }
注意 : dict 作为 Python 的关键字和内置函数,变量名不建议命名为 dict 。
键一般是唯一的,如果重复最后一个键值对会替换前面的,值不需要唯一。
typescript
>>> tinydict = {'a': 1, 'b': 2, 'b': '3'}
>>> tinydict['b']
'3'
>>> tinydict
{'a': 1, 'b': '3'}
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
一个简单的字典实例:
typescript
tinydict = {'qwer':'1234', 'asdf':'5678', 'zxcv' : '9012'}
也可如此创建字典:
typescript
tinydict1 = { 'abc': 456 }
tinydict2 = { 'abc': 123, 98.6: 37 }
字典的基本用法:
- 通过key访问value
- 通过key添加key-value对
- 通过key删除key-value对
- 通过key修改key-value对
- 通过key判断制定key-value对是否存在
- 通过key访问value使用的也是方括号语法
0x01 访问字典里的值
把相应的键放入方括弧中,如下实例:
python
# python2 运行不需要括号
tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print "tinydict['Name']: ", tinydict['Name']
print "tinydict['Age']: ", tinydict['Age']
# python3 运行需要括号
tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print("tinydict['Name']: ", tinydict['Name'])
print("tinydict['Age']: ", tinydict['Age'])
输出结果:
typescript
tinydict['Name']: Zara
tinydict['Age']: 7
如果用字典里没有的键访问数据,会输出错误如下:
实例:
python
tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
print("tinydict['Alice']: ", tinydict['Alice'])
以上实例输出结果:
0x02 修改字典
向字典中添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下实例:
python
# 基于 python3 实例
tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
tinydict['Age'] = 8 # 更新
tinydict['School'] = "RUNOOB" # 添加
print ("tinydict['Age']: ", tinydict['Age'])
print ("tinydict['School']: ", tinydict['School'])
以上实例输出结果:
typescript
tinydict['Age']: 8
tinydict['School']: RUNOOB
0x03 删除字典元素
能删单一的元素也可以清空字典,清空只需要一项操作。
显示删除一个字典用del命令,如下实例:
python
# 基于 python 3 实现
tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
del tinydict['Name'] # 删除键是'Name'的条目
tinydict.clear() # 清空字典所有条目
del tinydict # 删除字典
print ("tinydict['Age']: ", tinydict['Age'])
print ("tinydict['School']: ", tinydict['School'])
输出结果如上,因为使用del后字典不再存在;
0x04 判断字典是否包含指定key,用in或not in 运算符
需要指出的是,对于 dict 而言,in 或 not in 运算符都是基于 key 来判断的。例如如下代码:
python
#!/usr/bin/python
# 判断cars是否包含名为'AUDI'的key
cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}
print('AUDI' in cars) # True
# 判断cars是否包含名为'PORSCHE'的key
print('PORSCHE' in cars) # False
print('LAMBORGHINI' not in cars) # True
以上实例输出结果:
typescript
True
False
True
0x2 字典键的特性
字典值可以没有限制多地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不可以。
有俩个重要的点需要记住:
0x01
不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:
python
#!/usr/bin/python
# 基于 python 3 实现
tinydict = {'Name': 'Runoob', 'Age': 7, 'Name': 'Manni'}
print("tinydict['Name']: ", tinydict['Name'])
以上实例输出结果:
typescript
tinydict['Name']: Manni
0x2
键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行,如下实例:
python
#!/usr/bin/python
# 基于 python3
tinydict = {['Name']: 'Zara', 'Age': 7}
print("tinydict['Name']: ", tinydict['Name'])
以上实例输出结果:
0x3 字典内置函数&方法
Python字典包含如下内置函数:
- cmp(dict1,dict2) 比较俩个字典元素
如果俩个字典的元素相同返回0,如果字典dict1大于字典dict2返回1,如果字典dict1小于字典dict2返回-1。
**注意:**cmp函数在python3已经移除,如果要实现比较效果可以使用
python
if dict1 == dict2:
print("dict1 和 dict2 相等")
else:
print("dict1 和 dict2 不相等")
- len()函数
它可以用来获取字典中键-值对的数量,即字典的长度。
示例:
python
my_dict = {'a': 1, 'b': 2, 'c': 3}
length = len(my_dict)
print(length) # 输出:3
- str()函数
可以用于将字典转换为字符串,通常用于调试或打印字典的内容。
实例:
python
my_dict = {'a': 1, 'b': 2, 'c': 3}
dict_str = str(my_dict)
print(dict_str) # 输出:{'a': 1, 'b': 2, 'c': 3}
- type()函数
它可以用来检查对象的类型,包括字典。
示例:
python
my_dict = {'a': 1, 'b': 2, 'c': 3}
dict_type = type(my_dict)
print(dict_type) # 输出:<class 'dict'>
- clear()方法,用于情况字典中所有的key-value对,使用clear()后字典会变成一个空字典。
python
cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}
print(cars) # {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}
# 清空cars所有key-value对
cars.clear()
print(cars) # {}
- get()方法
根据 key 来获取 value,,它相当于方括号语法的增强版,当使用方括号语法访问并不存在的 key 时,字典会引发 KeyError 错误;但如果使用 get() 方法访问不存在的 key,该方法会简单地返回 None,不会导致错误。
python
cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}
# 获取'BMW'对应的value
print(cars.get('BMW')) # 8.5
print(cars.get('PORSCHE')) # None
print(cars['PORSCHE']) # KeyError
运行结果如下:
- update()方法
可使用一个字典所包含的 key-value 对来更新己有的字典。
python
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
# 使用update()方法将dict2的键值对合并到dict1中
dict1.update(dict2)
print(dict1) # 输出:{'a': 1, 'b': 3, 'c': 4}
- items()、keys()、values()
- pop()方法
- popitem()方法
- setdefault()方法
- fromkeys()方法
0x4 使用格式化字符串
字符串插值或字符串格式化是一种常见的技术,用于将变量的值插入到字符串中,以便创建格式化的输出。可以使用百分号(%)操作符来执行字符串插值,也可以使用f-strings(在Python 3.6及更高版本中可用)或str.format()方法来格式化字符串。
使用百分号(%)的操作:
python
temp = '博主的名字是:%(name)s, 截止目前粉丝数是:%(price)010.2f, 学习方向是:%(publish)s'
book = {'name': 'Sciurdae', 'price': 294, 'publish': 'Reverse'}
# 使用字典为字符串模板中的key传入值
print(temp % book)
book = {'name': 'Sciurdae', 'price': 1000000, 'publish': 'Crypto'}
# 使用字典为字符串模板中的key传入值
print(temp % book)
运行结果嘿嘿:
使用'format'的操作
python
data = {'Name': 'Sciurdae', 'free': 294}
formatted_string = "Name: {Name}, fensi: {free}".format(**data)
print(formatted_string)
这将创建一个格式化的字符串,将data字典中的键值插入到字符串中
运行结果:
typescript
Name: Sciurdae, fensi: 294