python系列 - 字典和集合
概念
- 字典dict:由一系列键(key)和值(value)配对组成的元素的集合
- 集合set:没有键和值的配对,是一系列无序的、唯一的元素组合
创建方式
d1 = {'name': 'jason', 'age': 20, 'gender': 'male'}
d2 = dict({'name': 'jason', 'age': 20, 'gender': 'male'})
d3 = dict([('name', 'jason'), ('age', 20), ('gender', 'male')])
d4 = dict(name='jason', age=20, gender='male')
d1 == d2 == d3 ==d4
True
s1 = {1, 2, 3}
s2 = set([1, 2, 3])
s1 == s2
True
🎉ATTENTION:
- python中字典和集合的键和值都可以是混合类型(例如:s = {1,'hello',5.0})
元素访问方式
字典访问可以直接索引键,例如:
d = {'name': 'jason', 'age': 20}
print(d['name'])
print(d['location'])
运行结果如下:
🎉ATTENTION:
- 访问字典内不存在的元素会直接抛出异常
也可以通过函数get(key,default)来进行索引,如果键不存在,调用get()函数可以返回一个默认值,例如:
d = {'name': 'jason', 'age': 20}
print(d.get('name'))
print(d.get('location', '这是自定义的默认值'))
运行结果如下:
🎉可以看出,返回的默认值为我们自定义的默认值
以上为字典内元素的访问方式,我们再来看看集合
🎉ATTENTION:
- 集合不支持索引!!!
- 想要判断元素在不在集合内,可以用xx in dict/set来判断,参考下栗👇👇👇
s = {1, 2, 3}
print(1 in s)
print(10 in s)
运行结果:
d = {'name': 'jason', 'age': 20}
print('name' in d)
print('location' in d)
运行结果:
元素操作
增、删、改
字典和集合都支持增加、删除、更新等操作
首先是字典,字典内对元素进行增加和更新,直接操作元素就可以了👇👇👇
d = {'name': 'mooii', 'age': 18}
d['gender'] = 'female' # 增加元素对'gender': 'female'
d['bir'] = '2004-06-06' # 增加元素对'bir': '2004-06-06'
print(d)
d['gender'] = 'male' # 更新键'gender'对应的值
print(d)
d.pop('gender') # 删除键为'gender'的元素对
print(d)
运行结果:
集合内对元素进行增加、更新、删除,参考栗子👇👇👇
s = {1, 2, 3}
s.add(4) # 增加元素4到集合
print(s)
s.remove(4) # 从集合中删除元素4
print(s)
运行结果如下:
🎉ATTENTION:
- 集合的pop()操作删除的是集合内的最后一个元素,但是集合本身是无序的(也就是说,我们无法直观地知道会删除哪个元素),慎用pop操作!!!
排序
对于字典的排序,我们可以根据键或值进行升序/降序操作,例如:
d = {'b': 1, 'a': 2, 'c': 10}
d_sorted_by_key = sorted(d.items(), key=lambda x: x[0]) # 根据字典键的升序排序
d_sorted_by_value = sorted(d.items(), key=lambda x: x[1]) # 根据字典值的升序排序
## 运行结果
d_sorted_by_key
[('a', 2), ('b', 1), ('c', 10)]
d_sorted_by_value
[('b', 1), ('a', 2), ('c', 10)]
🎉ATTENTION:
- 字典进行排序操作后,返回的是一个列表,列表中的每个元素是由原字典的键和值组成的元组
对于集合的排序,直接调用sorted()即可,返回的结果为排好序的列表,参考下例:
s = {3, 4, 2, 1}
sorted(s) # 对集合的元素进行升序排序
#排序后的结果为
[1, 2, 3, 4]