字典(dict)
字典是一种新的数据结构,被称为映射(mapping)。它类似于列表,都用于存储对象。然而,相比列表,字典在查询数据时性能更佳。这是因为在字典中,每个元素都有一个唯一的名字,通过这个名字可以快速查找到指定的元素。
字典由多个键值对(key-value)构成,其中每个键值对都有一个唯一的键和对应的值。通过键可以快速查询到对应的值。创建字典的方式是使用大括号 {},并提供键值对。键可以是任意不可变对象(例如 int、str、bool、tuple 等),但通常我们使用字符串作为键。
创建字典
使用{}来创建字典,语法:{k1:v1,k2:v2,k3:v3}。
# 使用{} d = {'name':'孙悟空', 'age':18, 'gender':'男'}
也可以使用dict()
函数来创建字典,每一个参数都是一个键值对,参数名就是键,参数值就是值(这种方式创建的字典,key都是字符串)。
# 使用dict()函数来创建字典 d = dict(name='孙悟空', age=18, gender='男')
还可以将一个包含双值子序列的序列转换为字典,双值序列指的是序列中只有两个值,如[1,2]
、('a',3)
和'
ab'
等。子序列指的是序列中的元素也是序列的情况,比如[(1,2),(3,5)]
。
d = dict([('name', '孙悟饭'), ('age', 18)])
获取字典中的值
可以使用键来获取字典中的值,语法为:d[key]
。如果键不存在,会抛出异常KeyError
。
print(d['age'])
可以使用get(key[, default])
方法来根据键获取字典中的值。如果键在字典中不存在,则会返回None
,也可以指定一个默认值作为第二个参数,当获取不到值时返回默认值。
print(d.get('name')) print(d.get('hello', '默认值'))
修改字典
可以使用d[key] = value
来修改字典中的键值对。如果键存在,则会覆盖其对应的值;如果键不存在,则会添加新的键值对。
d['name'] = 'sunwukong' # 修改字典的key-value d['address'] = '花果山' # 向字典中添加key-value
另外,还可以使用setdefault(key[, default])
方法向字典中添加键值对。如果键已经存在于字典中,则返回键对应的值,不会对字典做任何操作;如果键不存在,则向字典中添加该键,并设置对应的值。
result = d.setdefault('name', '猪八戒') result = d.setdefault('hello', '猪八戒')
还可以使用u
pdate([other])
方法将其他字典中的键值对添加到当前字典中。如果有重复的键,则后面的键值对会替换当前的。
d = {'a': 1, 'b': 2, 'c': 3} d2 = {'d': 4, 'e': 5, 'f': 6, 'a': 7} d.update(d2)
删除字典中的键值对
可以使用del
关键字删除字典中的键值对。
del d['a'] del d['b']
还可以使用popitem()
方法随机删除字典中的一个键值对,一般会删除最后一个键值对。删除后,该方法会将删除的键值对作为返回值返回,返回值是一个元组,包含两个元素,第一个元素是被删除的键,第二个元素是被删除的值。
result = d.popitem()
另外,还可以使用pop(key[, default])
方法根据键删除字典中的键值对。该方法会返回被删除的值。如果删除不存在的键,会抛出异常。如果指定了默认值,并且删除的键不存在,则不会报错,而是直接返回默认值。
result = d.pop('d') result = d.pop('z', '这是默认值')
此外,可以使用clear()
方法来清空字典中的键值对。
d.clear()
复制字典
可以使用copy()
方法对字典进行浅复制。复制后的对象和原对象是独立的,修改一个不会影响另一个。需要注意的是,浅复制只会复制对象内部的值,对于值也是可变对象的情况,它们不会被复制。
d = {'a': 1, 'b': 2, 'c': 3} d2 = d.copy()
d = {'a': {'name': '孙悟空', 'age': 18}, 'b': 2, 'c': 3} d2 = d.copy() d2['a']['name'] = '猪八戒'
print('d =', d, id(d)) print('d2 =', d2, id(d2))
字典推导式
与列表推导式类似,Python 还支持使用字典推导式创建字典。
# 创建一个包含数字的字典 d = {i: i**2 for i in range(5)} print(d) # 输出:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
遍历字典
遍历字典是指依次访问字典中的每一个键值对。在Python中,有几种方法可以实现字典的遍历操作。
使用keys()方法
keys()
方法会返回字典的所有键。我们可以通过遍历键来获取字典中的每个键值对。
示例代码:
d = {'name':'孙悟空','age':18,'gender':'男'} for k in d.keys(): print(k, d[k])
使用keys()
方法可以获取字典中的所有键,然后通过遍历键来获取每个键值对的值。
使用values()方法
values()
方法会返回字典的所有值。我们可以通过遍历值来获取字典中的每个键值对。
示例代码:
d = {'name':'孙悟空','age':18,'gender':'男'} for v in d.values(): print(v)
使用v
alues()
方法可以获取字典中的所有值,然后通过遍历值来访问每个键值对的值。
使用items()方法
items()
方法会返回字典中的所有项,每一项是一个包含键和值的双值子序列。
示例代码:
d = {'name':'孙悟空','age':18,'gender':'男'} for k, v in d.items(): print(k, '=', v)
使用items()
方法可以获取字典中的所有项,然后通过遍历项来获取每个键值对的键和值。
小结
字典是一种非常灵活的数据结构,可以用于存储各种类型的数据。通过键值对的方式,我们可以快速地查找、添加、修改和删除元素。此外,字典还支持字典推导式等高级用法,可以帮助我们更加方便地操作数据,同时你可以根据具体需求选择合适的方法进行遍历字典。
集合(set)
集合和列表非常相似,不同点如下:
1.集合中只能存储不可变对象
2.集合中存储的对象是无序的,不按元素的插入顺序保存
3.集合中不能存在重复的元素
创建集合
可以使用{}来创建集合:
s = {10, 3, 5, 1, 2, 1, 2, 3, 1, 1, 1, 1} # <class 'set'>
注意,集合中不能包含可变对象,例如列表:
# s = {[1, 2, 3], [4, 6, 7]} # TypeError: unhashable type: 'list'
可以使用set()
函数来创建集合:
s = set() # 空集合
还可以通过set()
将序列和字典转换为集合:
s = set([1, 2, 3, 4, 5, 1, 1, 2, 3, 4, 5]) s = set('hello') s = set({'a': 1, 'b': 2, 'c': 3}) # 只包含字典中的键
集合操作
可以使用以下操作来处理集合:
▪使用in和not in来检查集合中的元素是否存在
▪使用len()来获取集合中元素的数量
▪使用add()向集合中添加元素
▪使用update()将一个集合中的元素添加到当前集合中
▪使用pop()随机删除并返回一个集合中的元素
▪使用remove()删除集合中的指定元素
▪使用clear()清空集合
▪使用copy()进行浅复制
示例代码:
s = {'a', 'b', 1, 2, 3, 1} print('c' in s) # False print(len(s)) s.add(10) s.add(30) s2 = set('hello') s.update(s2) s.update((10, 20, 30, 40, 50)) s.update({10: 'ab', 20: 'bc', 100: 'cd', 1000: 'ef'}) result = s.pop() s.remove(100) s.remove(1000) s.clear() print(result) print(s, type(s))
集合运算
在对集合进行运算时,不会影响原来的集合,而是返回一个运算结果。
示例代码:
s = {1, 2, 3, 4, 5} s2 = {3, 4, 5, 6, 7} result = s & s2 # 交集运算 result = s | s2 # 并集运算 result = s - s2 # 差集 result = s ^ s2 # 异或集 a = {1, 2, 3} b = {1, 2, 3, 4, 5} result = a <= b # 检查一个集合是否是另一个集合的子集 result = {1, 2, 3} <= {1, 2, 3} # True result = {1, 2, 3, 4, 5} <= {1, 2, 3} # False result = {1, 2, 3} < {1, 2, 3} # 检查一个集合是否是另一个集合的真子集 result = {1, 2, 3} < {1, 2, 3, 4, 5} # True result = a >= b # 检查一个集合是否是另一个的超集 result = a > b # 检查一个集合是否是另一个的真超集 print('result =', result)
以上是关于集合的一些基本操作和运算,总结如下。
小结
当使用集合时,需要注意以下几点:
1.集合是一种无序且元素唯一的数据结构。
2.可以使用{}或set()函数创建集合。
3.集合中只能存储不可变的对象,不能包含可变对象。
4.可以使用in和not in来检查集合中的元素是否存在。
5.使用len()获取集合中元素的数量。
6.使用add()向集合中添加元素,使用update()将一个集合中的元素添加到当前集合中。
7.使用pop()随机删除并返回一个集合中的元素,使用remove()删除集合中的指定元素,使 用clear()清空集合。
8.使用copy()进行浅复制。
9.集合可以进行交集运算(&)、并集运算(|)、差集运算(-)和异或集运算(^)。
10.可以使用<=、<、>=和>来比较两个集合的关系,如子集、超集和真子集等。
总结起来,集合是一种非常有用的数据结构,适用于需要存储一组元素并进行快速元素查找和去重的场景。