python没有系统学过,走一步学一点吧,这次查缺补漏的点是dict;
文献参考:
菜鸟教程
ChatGPT
https://c.biancheng.net/view/2212.html
维基百科
字典是Python提供的一种常用的数据结构,它用于存放具有映射关系的数据。
字典中相当于存放了俩组数据,其中一组是关键数据被称为key,另外一组可以用key来访问,被称为value,形象的看 key和value的关系如下图:
source:https://c.biancheng.net/view/2212.html
字典的每个键值 key:value 对 用冒号 : 分割 ,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中,格式如下:
d = {key1 : value1, key2 : value2 }
注意 : dict作为 Python 的关键字和内置函数,变量名不建议命名为 dict。
键一般是唯一的,如果重复最后一个键值对会替换前面的,值不需要唯一。
>>> tinydict = {'a': 1, 'b': 2, 'b': '3'}
>>> tinydict['b']
'3'
>>> tinydict
{'a': 1, 'b': '3'}
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
一个简单的字典实例:
tinydict = {'qwer':'1234', 'asdf':'5678', 'zxcv' : '9012'}
也可如此创建字典:
tinydict1 = { 'abc': 456 }
tinydict2 = { 'abc': 123, 98.6: 37 }
字典的基本用法:
把相应的键放入方括弧中,如下实例:
# 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'])
输出结果:
tinydict['Name']: Zara
tinydict['Age']: 7
如果用字典里没有的键访问数据,会输出错误如下:
实例:
tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
print("tinydict['Alice']: ", tinydict['Alice'])
向字典中添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下实例:
# 基于 python3 实例
tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
tinydict['Age'] = 8 # 更新
tinydict['School'] = "RUNOOB" # 添加
print ("tinydict['Age']: ", tinydict['Age'])
print ("tinydict['School']: ", tinydict['School'])
以上实例输出结果:
tinydict['Age']: 8
tinydict['School']: RUNOOB
能删单一的元素也可以清空字典,清空只需要一项操作。
显示删除一个字典用del命令,如下实例:
# 基于 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'])
需要指出的是,对于 dict 而言,in 或 not in 运算符都是基于 key 来判断的。例如如下代码:
#!/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
以上实例输出结果:
True
False
True
字典值可以没有限制多地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不可以。
有俩个重要的点需要记住:
不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:
#!/usr/bin/python
# 基于 python 3 实现
tinydict = {'Name': 'Runoob', 'Age': 7, 'Name': 'Manni'}
print("tinydict['Name']: ", tinydict['Name'])
以上实例输出结果:
tinydict['Name']: Manni
键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行,如下实例:
#!/usr/bin/python
# 基于 python3
tinydict = {['Name']: 'Zara', 'Age': 7}
print("tinydict['Name']: ", tinydict['Name'])
Python字典包含如下内置函数:
if dict1 == dict2:
print("dict1 和 dict2 相等")
else:
print("dict1 和 dict2 不相等")
my_dict = {'a': 1, 'b': 2, 'c': 3}
length = len(my_dict)
print(length) # 输出:3
my_dict = {'a': 1, 'b': 2, 'c': 3}
dict_str = str(my_dict)
print(dict_str) # 输出:{'a': 1, 'b': 2, 'c': 3}
my_dict = {'a': 1, 'b': 2, 'c': 3}
dict_type = type(my_dict)
print(dict_type) # 输出:
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) # {}
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
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
# 使用update()方法将dict2的键值对合并到dict1中
dict1.update(dict2)
print(dict1) # 输出:{'a': 1, 'b': 3, 'c': 4}
字符串插值或字符串格式化是一种常见的技术,用于将变量的值插入到字符串中,以便创建格式化的输出。可以使用百分号(%)操作符来执行字符串插值,也可以使用f-strings(在Python 3.6及更高版本中可用)或str.format()方法来格式化字符串。
使用百分号(%)的操作:
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’的操作
data = {'Name': 'Sciurdae', 'free': 294}
formatted_string = "Name: {Name}, fensi: {free}".format(**data)
print(formatted_string)
这将创建一个格式化的字符串,将data字典中的键值插入到字符串中
运行结果:
Name: Sciurdae, fensi: 294