认识
字典是一系列 键-值对,是一种动态结构,用 {key : value} 表示
使用
1 创建一个空字典
-
使用花括号 {} 创建字典
person1 = {} person1['name'] = 'xiaoming' person1['gentle'] = '男' print(person1) #打印结果:{'name': 'xiaoming', 'gentle': '男'}
-
使用内置函数 dict() 创建空字典
person2 = dict() print(person2) #打印结果:{} person2['name'] = 'zhangsan' print(person2) #打印结果:{'name': 'zhangsan'} -
使用 dict.fromkeys(keys,value) 创建字典,其中包含指定的键和默认的值
keys::用于作为字典的键
value:可选参数,指定的默认值,将被赋给所有键,默认值为None
函数返回值: 返回一个新的字典,其中包含给定键作为键,给定默认值作为值
keys = ['hobby1','hobby2','hobby3'] value = 'running' person3 = dict.fromkeys(keys,value) print(person3) #打印结果:{'hobby1': 'running', 'hobby2': 'running', 'hobby3': 'running'}注意:fromkeys() 方法创建的字典中,所有的键都共享相同的默认值对象,如果默认值是可变对象(列表、字典等),修改其中一个键对应的值可能会影响到其他键的值,如下:
默认值是可变对象为字典:
keys = ['hobby1','hobby2','hobby3'] value = { 'choice1': 'running', 'choice2': 'baseball' } person3 = dict.fromkeys(keys,value) print(person3) person3['hobby1']['choice1'] = 'eating' print(person3) #打印结果: 每个键的hobby1的choice都变为eating {'hobby1': {'choice1': 'running', 'choice2': 'baseball'}, 'hobby2': {'choice1': 'running', 'choice2': 'baseball'}, 'hobby3': {'choice1': 'running', 'choice2': 'baseball'}} {'hobby1': {'choice1': 'eating', 'choice2': 'baseball'}, 'hobby2': {'choice1': 'eating', 'choice2': 'baseball'}, 'hobby3': {'choice1': 'eating', 'choice2': 'baseball'}}默认值是可变对象为列表:
value = ['running','baseball'] person3['hobby1'][0] = 'eating' #将键hobby1的running修改为eating #打印结果为:{'hobby1': ['eating', 'baseball'], 'hobby2': ['eating', 'baseball'], 'hobby3': ['eating', 'baseball']}而如果修改键对应的值,而不是修改默认值对象本身,则不会影响到其他键
person3['hobby1'] = 'eating' #结果为:{'hobby1': 'eating', 'hobby2': {'choice1': 'running', 'choice': 'baseball'}, 'hobby3': {'choice1': 'running', 'choice': 'baseball'}}
2 访问字典中的值
如下字典person包含两个 键-值对,依次指定字典名和键来获取与键相关联的值
person = {'name':'lihua','age':'18'}
print(person['name']) #打印结果:lihua
print(person['age']) #打印结果:18
3 添加 键-值 对
在A处新增两个 键-值对,其中键分别为 ’height‘ 、 'weight'
person = {'name':'lihua','age':18} #A
print(person) #打印结果:{'name': 'lihua', 'age': 18}
person['height'] = '182cm'
person['weight'] = '80kg'
print(person) #打印结果:{'name': 'lihua', 'age': 18, 'height': '182cm', 'weight': '80kg'}
4 修改字典中的值
将年龄age值修改为20:
person1 = {'name': 'lihua', 'age': 18, 'height': '182cm', 'weight': '80kg'}
person1['age'] = 20
print(person1) #打印结果:{'name': 'lihua', 'age': 20, 'height': '182cm', 'weight': '80kg'}
5 删除键-值对
对于不再需要的数据,可以使用 del语句将相应的键-值对彻底删除,使用del语句时,必须指定字典名和要删除的键
person1 = {'name': 'lihua', 'age': 18, 'height': '182cm', 'weight': '80kg'}
del person1['weight']
print(person1) #打印结果:{'name': 'lihua', 'age': 18, 'height': '182cm'}
6 类似多个对象组成的字典
前面的字典person存储的是一个对象(人)的多种信息,也可以使用字典存储多个对象的同一种信息,如下表示zhangsan、lisi、wangwu等人的身高。
heights = {
'zhangsan':'175cm',
'lisi':'180cm',
'wangwu':'171cm'
}
print("zhangsan's height is "+ heights['zhangsan']) #打印结果:zhangsan's height is 175cm
7 复制字典
使用 copy() 方法对字典进行复制
heights = {
'zhangsan':'175cm',
'lisi':'180cm',
'wangwu':'171cm',
'lihua':'171cm'
}
copy_heights = heights.copy()
print(copy_heights) #打印结果:{'zhangsan': '175cm', 'lisi': '180cm', 'wangwu': '171cm', 'lihua': '171cm'}
遍历字典
可遍历字典中的所有 键-值对、键或值
1 遍历所有的 键-值对
声明变量 name,height 用于存储键和值,方法items() 返回一个键-值对列表,for循环依次将每个键-值对存储到指定的变量 name,height 中。
heights = {
'zhangsan':'175cm',
'lisi':'180cm',
'wangwu':'171cm'
}
for name,height in heights.items():
print("Key: "+key)
print("Value: "+value)
#打印结果如下:
Name: zhangsan
Height: 175cm
Name: lisi
Height: 180cm
Name: wangwu
Height: 171cm
2 遍历字典中的所有键
不需要使用字典中的值时,可以用 key() 方法获取字典中的所有键
heights = {
'zhangsan':'175cm',
'lisi':'180cm',
'wangwu':'171cm'
}
for name in heights.keys(): #keys() 提取键,并依次存储到name中
print(name.title())
#打印结果:
Zhangsan
Lisi
Wangwu
也可以省略 keys() 方法,也能获取键
for name in heights:
print(name.title())
方法 keys() 并非只能用于遍历,实际上它返回的是一个列表,其中包含字典中的所有键。
def keys(self) -> dict_keys[_KT, _VT]: ...
举个栗子,判断 Tom 是否也测量了身高,打印结果为:Tom didn't measure his height。这里使用 key in dict 方法来判断,如果键在字典中则返回 True,否则返回 False。
heights = {
'zhangsan':'175cm',
'lisi':'180cm',
'wangwu':'171cm'
}
if 'Tom' not in heights.keys():
print("Tom didn't measure his height.")
else:
print("Tom's height is "+person1['Tom'])
3 按顺序遍历字典中所有键
以特定顺序返回元素,可以在 for 循环中对返回的键进行排序,排序使用可以 sorted() 方法临时排序。先列出字典中的所有键,并在遍历前对整个列表排序。
heights = {
'zhangsan':'175cm',
'lisi':'180cm',
'wangwu':'171cm'
}
for name in sorted(heights.keys()):
print(name.title())
打印结果:
Lisi
Wangwu
Zhangsan
4 遍历字典中的所有值
不需要使用字典中的键时,可以用 values() 方法获取键对应的值。使用 values() 方法提取字典中的每个值,并依次存储到weight中,同样 values() 返回的实际也是一个列表
heights = {
'zhangsan':'175cm',
'lisi':'180cm',
'wangwu':'171cm',
'lihua':'171cm'
}
for height in heights.values():
print(weight)
#打印结果:
175cm
180cm
171cm
171cm
但weights字典中, wangwu和lihua的身高同为 171cm,使用上述方法提取字典值时,相同的结果会重复输出。而如果数据量比较大且包含大量重复项时,可以使用 集合 set 去重。 集合是每个元素都独一无二的列表。
for height in set(heights.values()):
print(height)
#打印结果:
175cm
180cm
171cm
嵌套
将字典存储在列表中,即列表中嵌套字典
1 字典列表
如果团队中有 张三、李四、王五三个人,先创建三个字典分别存储各人的基本信息,persons列表存储这三个字典。
person1 = {'name': 'zhangsan', 'age': 18, 'height': '182cm', 'weight': '80kg'}
person2 = {'name': 'lisi', 'age': 15, 'height': '175cm', 'weight': '60kg'}
person3 = {'name': 'wangwu', 'age': 17, 'height': '180cm', 'weight': '65kg'}
persons = [person1,person2,person3]
for person in persons:
print(person)
但团队中可能不止三个人时,可以先创建个空列表用于存储人,再使用range() 方法创建10个人,然后显示前3个人。对于代码中出现的切片如果不熟悉的可以上一篇笔记##########
persons = []
for person_id in range(10): #创建10个人
new_person = {'name':'lihua','age':'18'}
persons.append(new_person)
for person in persons[:3]: #切片操作显示前3个人
print(person)
print("共创建的人数的为:"+ str(len(persons)))
#打印结果为:
{'name': 'lihua', 'age': '18'}
{'name': 'lihua', 'age': '18'}
{'name': 'lihua', 'age': '18'}
共创建的人数的为:10
2 在字典中存储列表
person = {
'name':'lihua',
'hobby':['running','basketball','swimming']
}
print(person['name'] + "有三个爱好,分别是:")
for hobby in person['hobby']:
print(hobby)
#打印结果:
lihua有三个爱好,分别是:
running
basketball
swimming
如下使用字典persons存储三个人的爱好,其中使用 name存储每个人姓名,列表 hobbies 存储每个人的爱好。在遍历字典的主循环中,又使用一个for循环遍历每个人的爱好。
persons = {
'lihua': ['running','basketball','swimming'],
'zhangsan': ['eating','sleeping'],
'wangwu': ['baseball','football']
}
for name,hobbies in persons.items():
print(name + "的爱好分别是:")
for hobby in hobbies:
print(hobby)
打印结果:
lihua的爱好分别是:
running
basketball
swimming
zhangsan的爱好分别是:
eating
sleeping
wangwu的爱好分别是:
baseball
football
3 字典中存储字典
persons字典中有三个键,即 lihua、zhangsan、wangwu三个人,每个人有年龄和身高。将姓名作为键,个人信息存储在一个字典中。在for循环中先遍历字典 persons,使用name存储每个键,并使用 info 存储与当前键相关联的字典。
persons = {
'lihua': {
'age': 18,
'height': '180cm'
},
'zhangsan': {
'age':17,
'height': '177cm'
},
'wangwu': {
'age': 18,
'height': '181cm'
}
}
for name,info in persons.items():
age = info['age']
height = info['height']
print(name + "的基本信息为" + str(age) + "岁, " + str(height))
#打印结果:
lihua的基本信息为18岁, 180cm
zhangsan的基本信息为17岁, 177cm
wangwu的基本信息为18岁, 181cm
总结
字典相关内置方法
dict.keys():返回键的视图对象dict.values():返回值的视图对象dict.items(): 以列表返回键值对的视图对象dict.fromkeys():创建一个新字典,以序列seq中元素作为字典的键,val作为字典键对应的值get(key, default=None):根据给定的键返回对应的值,如果键不存在则返回默认值(默认为None)。pop(key, default=None):根据给定的键删除字典中对应的键值对,并返回对应的值。如果键不存在且没有提供默认值,则会引发 KeyError 异常。popitem():随机删除并返回字典中的一个键值对。clear():清空字典,移除所有的键值对。update(other):将另一个字典或可迭代对象中的键值对更新到当前字典中。copy():创建并返回当前字典的一个副本。len():返回字典中键值对的数量。in:用于检查给定的键是否存在于字典中。