1.dict简介
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
一个简单的字典实例:
dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
注意:python 3.7 中字典是有序的(每次执行打印,顺序不会发生改变),从3.6开始字典都是有序的,并且从3.7开始这成了正式的Python语言特性
如果要使用有序dict,建议用OrderedDict
2.访问字典里的值
可以使用键来取其对应的值,格式:字典名[键名],如下实例:
dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
print("dict['Name']: ", dict['Name'])
print("dict['Age']: ", dict['Age'])
控制台输出:
3.修改字典和向字典中添加新内容
字典是一种动态结构,可随时在其中添加键值对。格式:字典名[键名]=值,如:
修改字典中的值,格式:字典名[键名]=新值,如:
dict1 = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
print('原字典:',dict1)
dict1['Age'] = 8 # 更新 Age
dict1['School'] = "菜鸟教程" # 添加新的key-value键值对
print("dict1['Age']: ", dict1['Age'])
print("dict1['School']: ", dict1['School'])
print('修改后字典:',dict1)
控制台输出:
4.字典内置函数
(1) len(dict)函数
计算字典元素个数,即返回字典中键值对的数量
dict1 = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
print(len(dict1))
控制台输出:
(2) str(dict)
输出字典,以可打印的字符串表示。通俗理解:字典转字符串
dict1 = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
a=str(dict1)
print(a)
控制台输出:
5. 遍历字典
(1)遍历所有的键值对
Python 字典内置方法 items() 方法以列表返回可遍历的(键, 值) 元组数组。返回可遍历的(键, 值) 元组数组。
可以使用for循环遍历所有的键值对,如:
dates = {'monday': 1, 'tuesday': 2, 'wednesday': 3, 'thursday': 4, 'friday': 5, 'saturday': 6, 'sunday': 7}
print(dates.items())
for key, value in dates.items():
print("key:" + key)
print("value:" + str(value))
控制台输出:
D:\softwaretools\anaconda\python.exe D:/pycharmprojects/hoteltest01/hoteltest01/testpy/test14.py
dict_items([('monday', 1), ('tuesday', 2), ('wednesday', 3), ('thursday', 4), ('friday', 5), ('saturday', 6), ('sunday', 7)])
key:monday
value:1
key:tuesday
value:2
key:wednesday
value:3
key:thursday
value:4
key:friday
value:5
key:saturday
value:6
key:sunday
value:7
Process finished with exit code 0
(2)遍历字典中的所有键
Python3 字典 keys() 方法返回一个可迭代对象,可以使用 list() 来转换为列表。
可以使用keys()方法返回所有的键列表,如:
dates = {'monday': 1, 'tuesday': 2, 'wednesday': 3, 'thursday': 4, 'friday': 5, 'saturday': 6, 'sunday': 7}
print(dates.keys())
for key in dates.keys():
print("key:" + key)
控制台输出:
D:\softwaretools\anaconda\python.exe D:/pycharmprojects/hoteltest01/hoteltest01/testpy/test14.py
dict_keys(['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'])
key:monday
key:tuesday
key:wednesday
key:thursday
key:friday
key:saturday
key:sunday
Process finished with exit code 0
(3)遍历字典中的所有值
可以使用values()方法,返回字典所有的值列表。如:
dates = {'monday': 1, 'tuesday': 2, 'wednesday': 3, 'thursday': 4, 'friday': 5, 'saturday': 6, 'sunday': 7}
print(dates)
for value in dates.values():
print("value:" + str(value))
控制台输出:
D:\softwaretools\anaconda\python.exe D:/pycharmprojects/hoteltest01/hoteltest01/testpy/test14.py
{'monday': 1, 'tuesday': 2, 'wednesday': 3, 'thursday': 4, 'friday': 5, 'saturday': 6, 'sunday': 7}
value:1
value:2
value:3
value:4
value:5
value:6
value:7
Process finished with exit code 0
6.collections.OrderedDict
Python内置四种基本container:list, dict, set, tuple,collections模块为其补充。OrderedDict为collections中一个容器。一言以蔽之,是为记住插入顺序的dict.
OrderedDict和Dict一样,但是它记住了item插入到字典的顺序。当对有序字典进行迭代时,item会按照第一次插入到字典的顺序返回。
很多人认为python中的字典是无序的,因为它是按照hash来存储的,但是python中有个模块collections(英文,收集、集合),里面自带了一个子类
OrderedDict,实现了对字典对象中元素的排序
d1 = {'banana': 3, 'apple': 4}
d2 = {'apple': 4,'banana': 3}
od1 = OrderedDict({'banana': 3, 'apple': 4})
od2 = OrderedDict({'apple': 4, 'banana': 3})
print(od1 == od2)
print(d2 == d1)
控制台输出:
7.pkl文件的理解
pkl文件的理解为:
1)python中有一种存储方式,可以存储为.pkl文件。
2)该存储方式,可以将python项目过程中用到的一些暂时变量、或者需要提取、暂存的字符串、列表、字典等数据保存起来。
3)保存方式就是保存到创建的.pkl文件里面。
4)然后需要使用的时候再 open,load。
if config.save_pkl:
torch.save(obj=data_dict, f=os.path.join(config.pkl_directory, config.pkl_data))