python基础之字典和集合

我们如果想知道一个不认识的英文单词的含义,不可能从头到尾遍历一本英文字典的每个单词。我们会使用字典中的索引,字典中每个索引都对应着很多的单词,属于一对多的键值对应关系。

在python中,字典是一种映射类型的数据,它不是序列,它是通过键-值一对一对应关系存储的。

如何定义字符串
字典的结构:{一堆键-值对,键-值对中间用逗号分隔}
方法一:直接通过赋值定义字典

>>> dict1 = {1:'one',2:'two',3:'three',4:'four'}
>>> dict1
{1: 'one', 2: 'two', 3: 'three', 4: 'four'}

方法二:定义一个空字典

>>> dict2 = {}
>>> dict2
{}

方法三:通过字典的BIL(内置函数)来定义字典
dict()内传入的参数应该是一个二维元组

>>> dict3 = dict((('I','我'),('really','真的'),('love','爱'),('you','你')))

>>> dict3

{'I': '我', 'really': '真的', 'love': '爱', 'you': '你'}

方法四:通过关键字参数赋值创建字典
注意用关键字赋值,键的写法不用加引号,因为python会自动的将其加上引号作为字符串处理。

>>> dict4 = dict(毛主席 = '中华人民共和国,今天成立了...',鲁迅 = '世上本没有路,走的人多了也就成了路')

>>> dict4

{'毛主席': '中华人民共和国,今天成立了...', '鲁迅': '世上本没有路,走的人多了也就成了路'}

方法五:通过内置函数dict.fromkeys((键的元组),值),来创建一个特殊的字典,这个字典的所有键对应的值都相同

>>> dict5 =dict.fromkeys(tuple(range(32)),'赞')

>>> dict5

{0: '赞', 1: '赞', 2: '赞', 3: '赞', 4: '赞', 5: '赞', 6: '赞', 7: '赞', 8: '赞', 9: '赞', 10: '赞', 11: '赞', 12: '赞', 13: '赞', 14: '赞', 15: '赞', 16: '赞', 17: '赞', 18: '赞', 19: '赞', 20: '赞', 21: '赞', 22: '赞', 23: '赞', 24: '赞', 25: '赞', 26: '赞', 27: '赞', 28: '赞', 29: '赞', 30: '赞', 31: '赞'}

如何取出已有字典中的数据
方法一:dict.name[键]即可取出键对应的值

>>> dict4['毛主席']

'中华人民共和国,今天成立了...'

方法二:通过内置函数dict.name.get(键),可取出键对应的值
如果访问的键在字典中不存在,则返回None。若访问的键不存在的同时又希望返回一个具体的数值,而非None,则可以用dict.name.get(不存在的键,具体的值)

>>> dict4['毛主席']

'中华人民共和国,今天成立了...'
>>> dict4.get('毛主席')

'中华人民共和国,今天成立了...'
>>> dict4.get('周恩来','木有')

'木有'

方法三:通过内置函数dict.name.pop(键),即可得到键所对应的值。但这种做法同时会删除执行的键-值对

>>> dict4.pop('毛主席')

'中华人民共和国,今天成立了...'

字典的一些常用的内置函数
keys(),返回一个列表,列表存储字典里的全部的键
values(),返回一个列表,列表存储字典里的全部的值
items(),返回一个列表,列表存储字典里的所有项

>>> list(dict5.keys())

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]
>>> list(dict5.values())

['赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞']
>>> list(dict5.items())

[(0, '赞'), (1, '赞'), (2, '赞'), (3, '赞'), (4, '赞'), (5, '赞'), (6, '赞'), (7, '赞'), (8, '赞'), (9, '赞'), (10, '赞'), (11, '赞'), (12, '赞'), (13, '赞'), (14, '赞'), (15, '赞'), (16, '赞'), (17, '赞'), (18, '赞'), (19, '赞'), (20, '赞'), (21, '赞'), (22, '赞'), (23, '赞'), (24, '赞'), (25, '赞'), (26, '赞'), (27, '赞'), (28, '赞'), (29, '赞'), (30, '赞'), (31, '赞')]

通过成员字符in 或not in 判断一个键是否是一个字典的键

>>> 23 in dict5

True
>>> 32 not in dict5

True

通过内置函数dict.name.clear()清空一个字典
通过内置函数dict.name.setdefault(键,值)来给字典添加一个项。

>>> dict4.setdefault('习近平','金山银山不如绿水青山')

'金山银山不如绿水青山'
>>> dict4

{'鲁迅': '世上本没有路,走的人多了也就成了路', '习近平': '金山银山不如绿水青山'}

通过dict.name.update(a),用一个字典a去更新另一个字典

>>> a =dict.fromkeys(('小黑','小白'))

>>> a

{'小黑': None, '小白': None}
>>> b =dict((('小白','狗'),('小灰','狗'),('小黑','狗')))

>>> b

{'小白': '狗', '小灰': '狗', '小黑': '狗'}
>>> a.update(b)

>>> a

{'小黑': '狗', '小白': '狗', '小灰': '狗'}

字典的浅拷贝内置函数copy()。浅拷贝与赋值不一样,浅拷贝的地址与被拷贝的对象不一样,而赋值的地址与被赋值的对象一样。改变赋值后的变量,原变量也变化。而改变浅拷贝的对象,原变量不变。

>>> c ={1:'one',2:'two'}

>>> d =c.copy()

>>> d

{1: 'one', 2: 'two'}
>>> e = c

>>> e

{1: 'one', 2: 'two'}
>>> e[1] = '这里是赋值'

>>> e

{1: '这里是赋值', 2: 'two'}
>>> c

{1: '这里是赋值', 2: 'two'}
>>> d

{1: 'one', 2: 'two'}

集合
集合是字典的表亲,集合和字典都是无序的,你不能通过索引得到字典或集合中某
一个元素的值。集合是唯一的,即表示集合中没有重复的数据

如何创建一个集合
方法:
1,用花括号包含一堆数据
2,用set()的内置方法
set(列表,元组,或字符串)


>>> set1 = set([1,2,35,4,56,35])

>>> set1

{1, 2, 35, 4, 56}
>>> type(set1)

<class 'set'>

读取集合内的元素:
1.用for把集合中的数据一个个读取出来
2.通过成员关系符in 和not in判断元素是否在集合中

>>> for each in set1:
    print(each)


1
2
35
4
56
>>> 2 in set1

True

在集合中添加数据和删除数据
添加,使用add()
删除,使用remove()

>>> set1.add('新添加的数据')

>>> set1.remove(35)

>>> 

print('经过添加和删除操作后的set1.....',set1)
>>> 

>>> set1

{1, 2, 4, '新添加的数据', 56}

定义一个不可变集合

>>> set2 =frozenset([1,2,35,456, 56])

>>> set2.add(78)

Traceback (most recent call last):
  File "<pyshell#72>", line 1, in <module>
    set2.add(78)
AttributeError: 'frozenset' object has no attribute 'add'

猜你喜欢

转载自blog.csdn.net/weixin_42920648/article/details/81628095