2021-06-10

PYTHON字典、集合

字典介绍

字典是“键值对”的无序可变序列,字典中的每个元素都是一个“键值对”,包含:“键 对象”和“值对象”。可以通过“键对象”实现快速获取、删除、更新对应的“值对象”。 列表中我们通过“下标数字”找到对应的对象。字典中通过“键对象”找到对应的“值 对象”。
1.“键”是任意的不可变数据,比如:整数、浮点数、字符串、元组。但是:列表、 字典、集合这些可变对象,不能作为“键”。并且“键”不可重复。
2.“值”可以是任意的数据,并且可重复。
一个典型的字典的定义方式:
a = {‘name’:‘gaoqi’,‘age’:18,‘job’:‘programmer’}

字典的创建

1. 我们可以通过{}、dict()来创建字典对象。

 >>> a = {'name':'gaoqi','age':18,'job':'programmer'} 
 >>> b = dict(name='gaoqi',age=18,job='programmer') 
 >>> a = dict([("name","gaoqi"),("age",18)]) 
 >>> c = {} #空的字典对象 >>> d = dict() #空的字典对象 

2. 通过 zip()创建字典对象

>>> k = ['name','age','job'] 
>>> v = ['gaoqi',18,'techer'] 
>>> d = dict(zip(k,v)) 
>>> d {'name': 'gaoqi', 'age': 18, 'job': 'techer'} 

3. 通过 fromkeys 创建值为空的字典

>>> a = dict.fromkeys(['name','age','job']) 
>>> a {'name': None, 'age': None, 'job': None}

字典元素的访问

为了测试各种访问方法,我们这里设定一个字典对象:
a = {‘name’:‘gaoqi’,‘age’:18,‘job’:‘programmer’}

1. 通过 [键] 获得“值”。若键不存在,则抛出异常:

>>> a = {'name':'gaoqi','age':18,'job':'programmer'} 
>>> a['name'] 'gaoqi' >>> a['age'] 
18
>>> a['sex'] 
Traceback (most recent call last): 
File "<pyshell#374>", line 1, in <module> 
a['sex'] 
KeyError: 'sex'

2. 通过 get()方法获得“值”。

推荐使用。优点是:指定键不存在,返回 None;也可以设 定指定键不存在时默认返回的对象。推荐使用 get()获取“值对象”。

>>> a.get('name') 
'gaoqi' 
>>> a.get('sex') 
>>> a.get('sex','一个男人') 
'一个男人' 

3. 列出所有的键值对

>>> a.items() 
dict_items([('name', 'gaoqi'), ('age', 18), ('job', 'programmer')])

4. 列出所有的键,列出所有的值

>>> a.keys() 
dict_keys(['name', 'age', 'job']) 
>>> a.values() 
dict_values(['gaoqi', 18, 'programmer'])

5. len() 键值对的个数

6. 检测一个“键”是否在字典中

>>> a = {"name":"gaoqi","age":18} 
>>> "name" in a 
True

字典元素添加、修改、删除

1. 给字典新增“键值对”。

如果“键”已经存在,则覆盖旧的键值对;如果“键”不存在, 则新增“键值对”。

>>> a = {'name':'gaoqi','age':18,'job':'programmer'} 
>>> a['address']='西三旗 1 号院' 
>>> a['age']=16 
>>> a 
{'name': 'gaoqi', 'age': 16, 'job': 'programmer', 'address': '西三旗 1 号院'}

2. 使用 update()

将新字典中所有键值对全部添加到旧字典对象上。如果 key 有重复,则直接覆盖

>>> a = {'name':'gaoqi','age':18,'job':'programmer'} 
>>> b = {'name':'gaoxixi','money':1000,'sex':'男的'} 
>>> a.update(b) 
>>> a 
{'name': 'gaoxixi', 'age': 18, 'job': 'programmer', 'money': 1000, 'sex': '男的'}

3. 字典中元素的删除

可以使用 del()方法;

或者 clear()删除所有键值对;

pop()删除指定 键值对,并返回对应的“值对象”;

>>> a = {'name':'ROY','age':18,'job':'programmer'} 
>>> del(a['name']) 
>>> a 
{'age': 18, 'job': 'programmer'} 
>>> b = a.pop('age') 
>>> b 
18

4. popitem() :随机删除和返回该键值对。

字典是“无序可变序列”,因此没有第一个元 素、最后一个元素的概念;popitem 弹出随机的项,因为字典并没有"最后的元素"或者其他有关顺序的概念。若想一个接一个地移除并处理项,这个方法就非常有效(因为不用首先获取键的列表)

>>> a = {'name':'ROY','age':18,'job':'programmer'} 
>>> a.popitem() 
('job', 'programmer') 
>>> a 
{'name': 'gaoqi', 'age': 18} 
>>> a.popitem() 
('age', 18) 
>>> a 
{'name': 'ROY'}

序列解包

序列解包可以用于元组、列表、字典。序列解包可以让我们方便的对多个变量赋值。

>>> x,y,z=(20,30,10) 
>>> x 
20
>>> y 
30
>>> z 
10
>>> (a,b,c)=(9,8,10) 
>>> 
a 
9
>>> [a,b,c]=[10,20,30] 
>>> a 
10
>>> b 
20

序列解包用于字典时,默认是对“键”进行操作; 如果需要对键值对操作,则需要使用 items();如果需要对“值”进行操作,则需要使用 values();

>>> s = {'name':'gaoqi','age':18,'job':'teacher'} 
>>> x,y,z = s #默认对键进行操作 
>>> x
'name' 
>>> x,y,z = s.items() #对键值对进行操作 
>>> x 
('name', 'gaoqi') 
>>> x,y,z = s.values() #对值进行操作 
>>> x 
'gaoqi'

集合

集合是无序可变,元素不能重复。实际上,集合底层是字典实现,集合的所有元素都是字典 中的“键对象”,因此是不能重复的且唯一的。

集合创建和删除

1. 使用{}创建集合对象,并使用 add()方法添加元素

>>> a = {3,5,7} 
>>> a 
{3, 5, 7} 
>>> a.add(9) 
>>> a 
{9, 3, 5, 7}

2. 使用 set(),将列表、元组等可迭代对象转成集合。

如果原来数据存在重复数据,则只保留一个。

>>> a = ['a','b','c','b']
>>> b = set(a) 
>>> b 
{'b', 'a', 'c'}

3. remove()删除指定元素;clear()清空整个集合

>>> a = {10,20,30,40,50} 
>>> a.remove(20) 
>>> a 
{10, 50, 30}

集合相关操作

像数学中概念一样,Python 对集合也提供了并集、交集、差集等运算。我们给出示例:

>>> a = {1,3,'sxt'} 
>>> b = {'he','it','sxt'} 
>>> a|b #并集 
{1, 3, 'sxt', 'he', 'it'} 
>>> a&b #交集 
{'sxt'} 
>>> a-b #差集 
{1, 3} 
>>> a.union(b) #并集 
{1, 3, 'sxt', 'he', 'it'} 
>>> a.intersection(b) #交集 
{'sxt'} 
>>> a.difference(b) #差集 
{1, 3}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值