python_day4_字典和集合

字典

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

a={'name':'xiaoer','age':8,'hobby':'prank'}

字典的创建

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

1,用{ }创建

>>> a={'name':'xiaoer','age':8,'hobby':'prank'}
>>> a
{'name': 'xiaoer', 'age': 8, 'hobby': 'prank'}
#用dict()创建-1
>>> b=dict(name='xiaoer',age=8,hobby='prank')
>>> b
{'name': 'xiaoer', 'age': 8, 'hobby': 'prank'}
#用dict()创建-2
>>> c=dict([('name','xiaoer'),('age',8)])
>>> c
{'name': 'xiaoer', 'age': 8}

2,通过zip创建字典对象

>>> x=['name','age','hobby']
>>> y=['xiaoer',8,'prank']
>>> z=dict(zip(x,y))
>>> z
{'name': 'xiaoer', 'age': 8, 'hobby': 'prank'}

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

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

字典元素访问

1.通过【键】获得‘值’,若键不存在,会显示异常

>>> a={'name':'xiaoer','age':8,'hobby':'prank'}
>>> a[age]  #不带引号识别不出来
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'age' is not defined
>>> a['age']
8
>>>
>>> a['sex'] #不存在则显示“键错误”
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'sex'

2.通过get()获得值。推荐使用。优点是:指定键不存在,返回none;也可以设定指定键不存在时默认返回的对象

>>> a.get('name')
'xiaoer'
>>> print(a.get('sex'))
None
>>> a.get('sex','man')
'man'

3.列出所有的键值对

>>> a.items()
dict_items([('name', 'xiaoer'), ('age', 8), ('hobby', 'prank')])

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

>>> a.keys()
dict_keys(['name', 'age', 'hobby'])
>>> a.values()
dict_values(['xiaoer', 8, 'prank'])

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

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

>>> a={'name':'xiaoer','age':8,'hobby':'prank'}
>>> a['address']="花园小区"
>>> a['age']=10
>>> a
{'name': 'xiaoer', 'age': 10, 'hobby': 'prank', 'address': '花园小区'}

2.使用update()将新字典中所有键值对全部添加到字典对象上。如果key 有重复则直接覆盖。

>>> a={'name':'xiaoer','age':8,'hobby':'prank'}
>>> b=dict(name='xiaoer',age=16,address='花园小区')
>>> a.update(b)
>>> a
{'name': 'xiaoer', 'age': 16, 'hobby': 'prank', 'address': '花园小区'}

3.字典中元素的删除,可以用del();也可以用clear()删除所有的键值对;pop()可以删除指定的键值对并返回对应的“值对象”

>>> a={'name':'xiaoer','age':8,'hobby':'prank'}
>>> del(a['name'])
>>> a
{'age': 8, 'hobby': 'prank'}
>>> b=a.pop('age')
>>> b
8
>>> a
{'hobby': 'prank'}
>>> a.clear()
>>> a
{}

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

>>> a={'name':'xiaoer','age':8,'hobby':'prank'}
>>> a.popitem()
('hobby', 'prank')
>>> a
{'name': 'xiaoer', 'age': 8}
>>> a.popitem()
('age', 8)
>>> a
{'name': 'xiaoer'}

序列解包操作在字典的应用

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

>>> a={'name':'xiaoer','age':8,'hobby':'prank'}
>>> r,s,t=a #默认对键进行操作
>>> r       #r,s,t可以换成任何变量
'name'
>>> t
'hobby'
>>> r,s,t=a.items() #对键值对进行操作
>>> s
('age', 8)
>>> r,s,t=a.values() #对值进行操作
>>> t
'prank'

复杂表格数据存储

遇到复杂表格数据存储,可以用列表和字典综合嵌套
姓名 年龄 城市
狗蛋 22 北京
旺财 23 长沙
铁柱 22 南京

>>> r1={'name':'狗蛋','age':22,'city':"北京"}
>>> r2={'name':'旺财','age':23,'city':"长沙"}
>>> r3={'name':'铁柱','age':22,'city':"南京"}
>>> tb=[r1,r2,r3]
>>> #获得第二行人的年龄
...
>>> print(tb[1].get('age'))
23
>>> #打印表中所有的年龄
...
>>> for i in range(3):
...     print(tb[i].get('age'))
...
22
23
22

集合

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

集合创建和删除

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

>>> a={4,5,6}
>>> a
{4, 5, 6}
>>> a.add(9)
>>> a
{9, 4, 5, 6}

使用set()将列表、元组等可迭代对象转成集合。如果原来数据存在重复,只保留一个

>>> a=[10,20,20,30]
>>> b=set(a)
>>> b
{10, 20, 30}

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

>>> a={4,5,6}
>>> a.remove(5)
>>> a
{4, 6}
>>> a.clear()
>>> a
set()

集合相关操作

并集、交集、差集等运算

>>> a={1,2,'s'}
>>> b={'s','d',6}
#并集
>>> a|b  
{1, 2, 6, 's', 'd'}
>>> a.union(b)
{1, 2, 6, 's', 'd'}
#交集
>>> a&b
{'s'}
>>> a.intersection(b)
{'s'}
#差集
>>> a-b
{1, 2}
>>> a.difference(b)
{1, 2}
发布了22 篇原创文章 · 获赞 1 · 访问量 466

猜你喜欢

转载自blog.csdn.net/ws297933371/article/details/104901625