目录
1.说明
Python 中的字典(dict)是一种无序、可变的数据类型。它是由键(key)和值(value)组成的键值对集合,每个键对应唯一的值。
说明:
a. 字典的键可以是任意的不可变类型
b. 成员资格查找时查找的是键而不是值
c. 即使键起初不存在也可以为它直接赋值,字典会自动添加新的项
d. 字典是不可修改的
2.操作字典
1. 创建字典
使用大括号 {} 来创建一个空字典,或者使用花括号 {key: value} 来创建带有初始键值对的字典。
字典的键必须是不可变类型,如字符串、数字或元组等,而键对应的值可以是任何数据类型。其中value可以是任意类型,而key则必须是不可变类型,通常key应该是str类型,因为str类型会对value有描述性的功能
empty_dict = {}
fruit_dict = {'apple': 1, 'banana': 2, 'orange': 3}
info={'name':'tony','age':18,'sex':'male'} #本质info=dict({....})
# 也可以这么定义字典
info=dict(name='tony',age=18,sex='male') # info={'age': 18, 'sex': 'male', 'name': 'tony'}
2. 访问字典中的值(字典取值)
通过键来访问字典中的值。如果键不存在,则会抛出 KeyError 异常,可以使用 get() 方法来避免这种情况。
print(fruit_dict['apple']) # 输出 1
print(fruit_dict.get('watermelon', 0)) # 输出 0,因为 watermelon 键不存在
1.按key存取值:可存可取
# 1.1 取
dic = {
'name': 'xxx',
'age': 18,
'hobbies': ['play game', 'basketball']
}
print(dic['name'])#'xxx'
print(dic['hobbies'][1])#'basketball'
1.2 对于赋值操作,如果key原先不存在于字典,则会新增key:value
dic['gender'] = 'male'
print(dic)#{'name': 'tony', 'age': 18, 'hobbies': ['play game', 'basketball'],'gender':'male'}
1.3 对于赋值操作,如果key原先存在于字典,则会修改对应value的值
dic['name'] = 'tony'
print(dic)#{'name': 'tony', 'age': 18, 'hobbies': ['play game', 'basketball']}
小练习:取出最后一个字典 f 的值
info = {
'username': 'kevin',
'addr': ['a', 'b', {'aa': 1, 'bb': 2, 'hobby': ['xijio', 'tangtou', 'hejiu', {'c': 1, 'd': 2, 'f': 'LYNB'}]}]
}
ll = info['addr'][2]['hobby'][3]['f']
print(ll)
3. 更新字典
通过键来更新字典中的值,或者使用 update() 方法来更新多个键值对。
fruit_dict['apple'] = 4 # 将 apple 的值更新为 4
fruit_dict.update({'banana': 5, 'watermelon': 6}) # 更新多个键值对
4. 删除字典
可以使用 del 关键字删除字典中的键值对,或使用 clear() 方法清空整个字典。
del fruit_dict['apple'] # 删除键为 'apple' 的键值对
fruit_dict.clear() # 删除字典中的所有键值对
5. 循环(遍历)字典
可以使用 for 循环来遍历字典中的键值对。使用 keys() 方法来获取所有的键,使用 values() 方法来获取所有的值,使用 items() 方法来获取所有的键值对。
fruit_dict = {'apple': 1, 'banana': 2, 'orange': 3}
1.循环
6.1 默认遍历的是字典的key
for key in dic:
print(key)
"""执行结果:
age
hobbies
name
"""
6.2 只遍历key
for key in dic.keys():
print(key)
"""执行结果:
age
hobbies
name"""
6.3 只遍历value
for key in dic.values():
print(key)
"""执行结果:
18
['play game', 'basketball']
xxx"""
6.4 遍历key与value
for key in dic.items():
print(key)
"""执行结果:
('age', 18)
('hobbies', ['play game', 'basketball'])
('name', 'xxx')"""
6. 类型转换
转换1:
info=dict([['name','tony'],('age',18)])
print(info)#{'age': 18, 'name': 'tony'}
转换2:fromkeys会从元组中取出每个值当做key,然后与None组成key:value放到字典中
{}.fromkeys(('name','age','sex'),None) #{'age': None, 'sex': None, 'name': None}
字典内置方法
1.clear(): 用于删除字典中的所有元素。
fruit_dict = {'apple': 1, 'banana': 2, 'orange': 3}
fruit_dict.clear()
print(fruit_dict) # 输出 {}
2.copy(): 返回一个字典的浅拷贝(shallow copy)。
fruit_dict = {'apple': 1, 'banana': 2, 'orange': 3}
copy_fruit_dict = fruit_dict.copy()
print(copy_fruit_dict) # 输出 {'apple': 1, 'banana': 2, 'orange': 3}
3.fromkeys(seq[, value]): 用于创建一个新字典,其中包含序列 seq 中每个元素作为键,而所有的值都设置为value。
seq = ('apple', 'banana', 'orange')
fruit_dict = dict.fromkeys(seq, 0)
print(fruit_dict) # 输出 {'apple': 0, 'banana': 0, 'orange': 0}
4.get(key[, default]): 返回指定键的值,如果键不存在则返回默认值。
fruit_dict = {'apple': 1, 'banana': 2, 'orange': 3}
print(fruit_dict.get('apple', 0)) # 输出 1
print(fruit_dict.get('watermelon', 0)) # 输出 0
dic= {'k1':'jason','k2':'Tony','k3':'JY'}
dic.get('k1') #'jason' # key存在,则获取key对应的value值
res=dic.get('xxx') # key不存在,不会报错而是默认返回None
print(res) #None
res=dic.get('xxx',666) # key不存在时,可以设置默认返回的值
print(res) #666
# ps:字典取值建议使用get方法
5.items(): 返回一个包含所有(键,值)元组的列表。获取字典所有的键值对
fruit_dict = {'apple': 1, 'banana': 2, 'orange': 3}
print(fruit_dict.items()) # 输出 dict_items([('apple', 1), ('banana', 2), ('orange', 3)])
6.keys(): 返回一个包含所有键的列表。获取字典所有的key
fruit_dict = {'apple': 1, 'banana': 2, 'orange': 3}
print(fruit_dict.keys()) # 输出 dict_keys(['apple', 'banana', 'orange'])
7.pop(key[, default]): 删除指定键,并返回对应的值。如果键不存在,则返回默认值(如果提供了)或引发 KeyError 错误。
dic= {'k1':'jason','k2':'Tony','k3':'JY'}
v = dic.pop('k2') # 删除指定的key对应的键值对,并返回值
print(dic)#{'k1': 'jason', 'kk2': 'JY'}
print(v)#'Tony'
8.popitem(): 随机删除并返回一个(键,值)对元组。
dic= {'k1':'jason','k2':'Tony','k3':'JY'}
item = dic.popitem() # 随机删除一组键值对,并将删除的键值放到元组内返回
print(dic)#{'k3': 'JY', 'k2': 'Tony'}
print(item)#('k1', 'jason')
9.setdefault(key[, default]): 如果键存在,则返回其值,否则将键插入字典并返回默认值(如果提供了)或 None。
1.key不存在则新增键值对,并将新增的value返回
dic={'k1':111,'k2':222}
res=dic.setdefault('k3',333)
print(res)# 333
print(dic) # 字典中新增了键值对 #{'k1': 111, 'k3': 333, 'k2': 222}
2.key存在则不做任何修改,并返回已存在key对应的value值
dic={'k1':111,'k2':222}
res=dic.setdefault('k1',666)
print(res)#111
dic # 字典不变 #{'k1': 111, 'k2': 222}
10.update([other]): 更新字典,以其他字典或键-值对序列(iterable)中的键值覆盖当前字典中的相应值。
fruit_dict = {'apple': 1, 'banana': 2}
fruit_dict.update({'orange': 3, 'watermelon': 4})# 用新字典更新旧字典,有则修改,无则添加
print(fruit_dict) # 输出 {'apple': 1, 'banana': 2, 'orange': 3, 'watermelon': 4}
11.values(): 返回一个包含所有值的列表。获取字典所有的value
fruit_dict = {'apple': 1, 'banana': 2, 'orange': 3}
print(fruit_dict.values()) # 输出 dict_values([1, 2, 3])