Python中的字典
字典是一系列键值对,每个键都与一个值关联,可以使用键来访问与之关联的值。
# 创建空字典
person = {}
# 创建有值字典
person = {'name': 'Jason', 'age': 25}
如果想要访问字典中与键所关联的值可以通过下述方式访问:
person['name']
通常在代码量较大的程序中会对字典频繁操作,这个时候为了防止后续访问的键在字典中不存在,可以使用字典内置的get()方法,get()方法的第一个参数用于指定需要获取的键,第二个参数用于指定如果需要获取的键不存在返回什么。这样可以避免通过字典名称 + 键名称获取值时,字典中不存在对应键导致程序报错。
报错场景:
person = {'name': 'Jason', 'age': 25, 'phone': '12345678', 'address': 'New York'}
print(person['id'])
执行结果:
正确写法:
person = {'name': 'Jason', 'age': 25, 'phone': '12345678', 'address': 'New York'}
print(person.get('id', "Residents have not yet entered the information."))
执行结果:
字典相关操作
-
添加键值对
字典是一种动态结构,可以随时向里面添加新的键值对,这里以一个人的个人信息来举例。现在要给这个人添加联系电话和所在城市信息。
person = {'name': 'Jason', 'age': 25} print(person) person['phone'] = '12345678' person['address'] = 'New York' print(person)执行结果:
字典元素的排序顺序会与该元素的添加顺序相同。
-
修改字典中的值
可以通过对该键对应的值进行重新赋值。
person = {'name': 'Jason', 'age': 25, 'phone': '12345678', 'address': 'New York'} print(f"Jason's current age is {person['age']}") print(f"\nTwo years passed") person['age'] = person['age'] + 2 print(f"\nJason's current age is {person['age']}")执行结果:
-
删除键值对
可以使用
del语句将字典中的键值对从列表当中彻底删除。person = {'name': 'Jason', 'age': 25, 'phone': '12345678', 'address': 'New York'} print(person) del person['phone'] print(person)执行结果:
-
遍历字典:
想要遍历字典中的内容同样可以使用
for循环来完成,可以定义两个变量k、v一个用来存储键(key),一个用来存储值(value)。接下来不能直接遍历字典变量,需要使用items()方法,转换为字典视图对象,从下述代码执行结果来看,直接访问字典变量,和访问使用items()方法后的变量是完全不同的。了解了上述条件可以实现一下遍历:
user_0 = { 'username': 'efermi', 'first': 'enrico', 'last': 'fermi', } for key, value in user_0.items(): print(f"\nKey: {key}") print(f"Value: {value}")执行结果:
也可以直接遍历访问字典,这个时候返回的结果就无法使用两个变量直接接收返回的键和值,而是返回的键。与使用字典内置的
keys()效果相同。favorite_programing_languages = { 'jen': 'python', 'sarah': 'c', 'edward': 'rust', 'phil': 'python' } for coder_name in favorite_programing_languages: print(f"{coder_name.title()}, I see you love {favorite_programing_languages[coder_name].title()}") print("\n") favorite_languages = { 'jason': 'english', 'bob': 'chinese', 'alice': 'french', } for name in favorite_languages: print(f"{name.title()}, I see you love {favorite_languages[name].title()}")执行结果:
同时可以使用字典内置的
values()方法访问字典中所有的值。直接遍历访问是没有处理值中的重复值可以将获取到的值传入set()方法将其变成一个集合,可以过滤掉重复元素。集合与字典定义方式比较相似,当
{}中没有键值对取而代之的是不同类型的值,这个时候就是集合,集合里面不会存储重复元素,并且不会以特定顺序存储。favorite_programing_languages = { 'jen': 'python', 'sarah': 'c', 'edward': 'rust', 'phil': 'python' } print("The following languages have been mentioned:") for language in set(favorite_programing_languages.values()): print(language.title())执行结果:
嵌套
-
字典列表
如果需要做一个字典的集合,这个时候就需要在列表里面嵌套字典结构,接下来用一个例子看一下。
# 创建一个用于存储外星人的空列表 aliens = [] # 创建30个绿色的外星人 for alien_number in range(30): new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'} aliens.append(new_alien) # 显示前5个外星人 for alien in aliens[:5]: print(alien) print("...") # 显示创建了多少个外星人 print(f"Total number of aliens: {len(aliens)}")执行结果:
-
字典中的列表
如果字典中的某个键需要对应多个值的时候,就需要使用这种嵌套结构。
# 存储客人所点披萨的信息 pizza = { 'crust': 'thick', 'toppings': ['mushrooms', 'extra cheese'], } # 概述顾客点的披萨 print(f"You ordered a {pizza['crust']}-crust pizza " "with the following toppings:") for topping in pizza['toppings']: print(f"\t{topping}")执行结果:
-
字典中的字典:
也有可能字典中的键所对应的值本身也是一个字典。
# 创建一个用户群字典 users = { 'aeinstein': { 'first': 'albert', 'last': 'einstein', 'location': 'princeton', }, 'mcurie': { 'first': 'marie', 'last': 'curie', 'location': 'paris', }, } # 遍历字典中的各个用户及其用户信息 for username, user_info in users.items(): print(f"\nUsername: {username}") full_name = f"{user_info['first']} {user_info['last']}" location = user_info['location'] print(f"\tFull name: {full_name.title()}") print(f"\tLocation: {location.title()}")执行结果: