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. 修改 字典

修改指的:

  • 增/删: 增加值/键值对。如果说键没有且值是新的,则创建一个键值对
  • 改: 更新键值对,其实就是赋值,覆盖掉原来的值

注意事项和细节:

  1. 如果key不存在,dict就会报错 【Exampe-01】
  2. 避免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打印输出的时候不允许有相同值,会被剔除 )

    集合的基本功能就是

  1. 成员关系测试
  2. 删除重复元素

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

猜想: 说明不改变原来变量?

在这里插入图片描述

posted @ 2021-06-06 13:46  茶哩哩  阅读(396)  评论(0编辑  收藏  举报