Python | python基础(六) - 字典和集合
字典和集合
1. 字典
字典是什么?
这个字典也可以理解为生活中的字典,就那汉语字典来说,一个事物由名词和解释组成,,这个名词和解释是对应的,如果是学生成绩,就是list
['张三','李四','王五','小二']
[100,89,65,60]
如果是说要查找对应的学生的成绩的话,比如,要找张三
同学的成绩
第一步:肯定要先找到张三在表的哪里
第二步:找出对应的成绩
也就是先要遍历学生列表,还要遍历成绩列表,这样随着内容的增多,运算量跟着变大
list
越长,耗时越长
为什么需要字典?
使用字典的好处就是,学生名字和成绩关系紧密,不需要再次遍历成绩,找到名字,就可以锁定成绩
dict = {'张三':100,'李四':89,'王五':65,'小二':60}
print("dict[张三]",dict["张三"])
运行:
dict[张三] 100
💁♂️所以字典就是类似这样的功能,有一个索引,通过这个索引可以快速的找到对应的信息位置
python字典
Python字典是一个可变容器模型,可以储存任意的数据类型对象
如:字符串,数字,元组等,字典也可以被称为关联数组或哈希表
1.1. 创建 字典
字典是键-值对形式: key-value
dict = {'zhangsan':90,'wangwu':80}
# 或者
dict2 = {'abc':123,98,4:37}
1.2. 访问 字典值
访问字典用中括号 [ ]
dict = {'Name':'王海','age':17,'Class':'计算机1班'}
print("dict[Name]:",dict['Name'])
运行:
dcit[Name]:王海
1.3. 修改 字典
修改指的:
- 增/删: 增加值/键值对。如果说键没有且值是新的,则创建一个键值对
- 改: 更新键值对,其实就是赋值,覆盖掉原来的值
注意事项和细节:
- 如果key不存在,dict就会报错 【Exampe-01】
- 避免key不存在的错误,有两种办法: 一是通过in判断key是否存在 ; 通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value 【Exampe-02】
Exampe-01
>>> dict['张三']
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
dict['张三']
KeyError: '张三'
Exampe-02
>>> '张三' in dict
False
# 访问字典值, 若值不存在设置默认值 存在key
dict = {'tom':10,'jim':20,'damn':30,'kim':40}
c= dict.get('tom',-1)
print(c) # 10
# 访问字典值, 若值不存在设置默认值 不存在key
dict = {'tom':10,'jim':20,'damn':30,'kim':40}
c= dict.get('tom',-1) # 第二个参数是对于不存在key的情况,设置key一个默认值-1
print(c) # -1
# 访问字典值,不存在key且没有设置默认值
dict = {'tom':10,'jim':20,'damn':30,'kim':40}
c= dict.get('adam')
print(c) # None
⚠️ 注意:返回None
的时候Python的交互环境不显示结果。
pop,删除key,以及对应的value
要删除一个key
,用pop(key)方法,对应的value也会从dict中删除
dict = {'Name':'王海','age':17,'Class':'计算机1班'}
dict.pop('Name') # 删除Name key
print(dict) # {'age': 17, 'Class': '计算机1班'}
# 已经删除对应的key-value
1.4. 字典方法和函数
1、dict.items()
作用: 把字典中的key和value组成一个元组,然后把元组放在列表中返回
dict = {'我':12.'你':13,'他':34}
a = dict.items()
print(a) # dcit_items([('我':12),('我':12),('他':34)])
# 实际打印出来的是 : [('我':12),('我':12),('他':34)]
dict可以用在需要
高速查找
的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象
。
这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希
算法(Hash)。
要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key
2、dict.clear()
作用: 删除字典内的所有的元素
dict1 = {'我':12,'你':13,'他':14}
dict2 = {'天':45}
dict1.clear()
print(dict1) # {}
删除一个字典用del
语句
del dict1
print(dic1) # NameError: name 'dic1' is not defined
⚠️ 字典的元素是由 key:value
组合成的
3、dict.copy()
作用: 返回字典副本(浅赋值)
dict1 = {'我':12,'你':13,'他':14}
dict2 = {'天':45}
a = dict1.copy()
print(a) # {'我': 12, '你': 13, '他': 14}
换一种方式更能说明copy()
的作用: 对象调用方法返回一值作为返回值
>>> dict1 = {'我':12,'你':13,'他':14}
>>> dict2 = {'天':45}
>>> dict3 = dict1.copy()
>>> print(dict3)
{'我': 12, '你': 13, '他': 14}
4、dict.fromkeys(seq,value)
作用: 创建一个新的字典
,把seq
中的元素作为这个新字典的key
,把value
作为所有的值
>>> list = [1,2,3,4,5]
>>> dict1 = dict1.fromkeys(list,'中国')
>>> print(dict1)
{1: '中国', 2: '中国', 3: '中国', 4: '中国', 5: '中国'}
5、dict.get(key,default=None)
作用: 返回指定key
的值,如果不存在,则返回default设置的默认值
>>> dict = {'中国':1 , '瓷器':2, '大唐':3 , '大明':4 , '大宋':5 }
>>> print('value:',dict.get('中国'))
value: 1
>>> print('value:',dict.get('大秦'))
value: None
#### dict1.has_key(key)python3.0以后删除了此方法
6、dict.keys()
作用: 返回所有键,以列表
的形式,返回字典的所有的键
>>> dict = {'中国':1 , '瓷器':2, '大唐':3 , '大明':4 , '大宋':5 }
>>> print(dict.keys())
dict_keys(['中国', '瓷器', '大唐', '大明', '大宋'])
7、dict.setdefault(key,default=None)
作用: 和get()
类似,但是如果键
不存在,会添加键,把default做为value
>>> dict = {'中国':1 , '瓷器':2, '大唐':3 , '大明':4 , '大宋':5 }
>>> print('value:',dict.setdefault('大清','大秦'))
value: 大秦
>>> print(dict)
{'中国': 1, '瓷器': 2, '大唐': 3, '大明': 4, '大宋': 5, '大清': '大秦'}
8、dict.update(dict2)
作用: 容易理解,就是把dict2的key-value
到dict1中
9、dict.values()
作用: 以列表的形式返回字典中的值value
>>> dict1 = {'我':12,'你':13,'他':14}
>>> list1 = ['姓名','性别','年龄','学号','住址']
>>> dict2 = {'天':45}
>>> a = dict1.values()
>>> print(a)
dict_values([12, 13, 14])
10、type(variable)
>>> type(dict)
<class 'dict'>
>>> type(list1)
<class 'list'>
11、len(dict)
>>> len(dict1)
3
{'我':12,'你':13,'他':14}
12、str(dict)
作用: 返回dict的str字符串
>>> str(dict)
"{'中国': 1, '瓷器': 2, '大唐': 3, '大明': 4, '大宋': 5, '大清': '大秦'}"
>>> type(str(dict))
<class 'str'>
2. 集合
集合是什么?
-
集合是一个无序不重复的序列 (和数学上的集合概念一样)
-
python集合创建集合的时候,可以存在重复值 (所以
print
打印输出的时候不允许有相同值
,会被剔除 )集合的基本功能就是
- 成员关系测试
- 删除重复元素
2.1. 创建 集合
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list
作为输入集合
s = set([1, 2, 3])
print(s) # {1, 2, 3}
1、set( [ ] ) or
set()
使用{}
或set()
函数
⚠️ 注意创建一个空的集合必须使用set(),而不是使用{}
,因为{}
是用来创建一个空的字典的
# 输出集合,并将重复的元素删除掉
student = {'Tom','Jim','Marry','Jack','Tom','Jim'}
print(student) # {'Jack', 'Marry', 'Jim', 'Tom'}
2.2. 运算 集合
- 差 -
- 并 |
- 交 &
- a ,b 同时不存在的元素 a ^ b
2.3. 集合 方法
1、add(key)
作用: 通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果
set1 = {'Jack', 'Marry', 'Jim', 'Tom'}
set1.add('martin')
print(set1) # {'Jack', 'Jim', 'Tom', 'martin', 'Marry'}
2、remove(key)
作用: 通过remove(key)方法可以删除元素
set1 = {'Jack', 'Marry', 'Jim', 'Tom'}
set1.remove('Jim')
print(set1) # {'Tom', 'Jack', 'Marry'}
再议不可变对象
对于可变对象,比如list,对list进行操作,list内部的内容是会变化的
>>> list1 = [3,2,1]
>>> a= list1.sort()
>>> list1
[1, 2, 3]
>>> print(a)
None
而对于不可变对象,比如str,对str进行操作呢
a = 'abc'
c = a.replace('a','A')
print(c) # Abc
如果输出a 呢?
>>> a = 'abc'
>>> c = a.replace('a','A')
>>> print(a)
abc
猜想: 说明不改变原来变量?
来源: 博客园
作者: 茶哩哩
文章: 转载请注明原文链接:https://www.cnblogs.com/martin-1/p/14855171.html