Pyhton3(三):集合与字典

79 阅读4分钟

Set

集合(set)是一个无序的不重复元素序列。

本质上是一张哈希表

注意:不支持索引,重复,连接,切片

创建集合

可以使用大括号 { } 或者 set() 函数创建集合

注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

parame = {value01,value02,...}
或者
set(value)

添加元素

添加单个元素

使用add()添加单个元素

basket = {'apple', 'orange', 'pear', 'banana'}
basket.add('strawberry')
print(basket)   # {'banana', 'pear', 'apple', 'strawberry', 'orange'}

添加特殊元素

使用update()添加特殊元素

注意:参数可以是列表,元组,字典等

basket = {'apple', 'orange', 'pear', 'banana'}
tup = ('Google', 1997, 2000)
basket.update(tup)
print(basket)   # {'apple', 1997, 2000, 'banana', 'pear', 'Google', 'orange'}

移除元素

remove()

使用remove()移除元素

basket = {'apple', 'orange', 'pear', 'banana'}
basket.remove('banana')
print(basket)   # {'apple', 'orange', 'pear'}

注意:如果元素不存在,则会发生错误

basket = {'apple', 'orange', 'pear', 'banana'}
basket.remove('strawberry')
​
# Traceback (most recent call last):
#  File "main.py", line 16, in <module>
#    basket.remove('strawberry')
# KeyError: 'strawberry'

discard()

使用discard()移除集合中的元素,且如果元素不存在,不会发生错误

basket = {'apple', 'orange', 'pear', 'banana'}
basket.discard('strawberry')
print(basket)   # {'banana', 'apple', 'pear', 'orange'}

pop()

设置随机删除集合中的一个元素

basket = {'apple', 'orange', 'pear', 'banana'}
basket.pop()
print(basket)   # {'apple', 'orange', 'pear'}

注意:set 集合的 pop 方法会对集合进行无序的排列,然后将这个无序排列集合的左面第一个元素进行删除。

清空集合

可以使用clear()删除集合中的元素

basket = {'apple', 'orange', 'pear', 'banana'}
basket.clear()
print(basket)   # set()

判断集合中有没有该元素

x in s

判断元素 x 是否在集合 s 中,存在返回 True,不存在返回 False。

basket = {'apple', 'orange', 'pear', 'banana'}
​
print('apple' in basket)    # True

特性

字段不重复

集合内的字段是不可重复的

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket)   # {'apple', 'orange', 'banana', 'pear'}

集合间的运算

运算作用
a - b集合a中包含而集合b中不包含的元素
ab集合a或b中包含的所有元素
a & b集合a和b中都包含了的元素
a ^ b不同时包含于a和b的元素

Dictionary

字典是一系列由键(key)和值(value)配对组成的元素的集合

字典是另一种可变容器模型,且可存储任意类型对象。

python3.7之后,字典底层是2个数组,一个为一维数组,存放hash(key)取余后的值作为数组的索引,对应索引位置存放键值对在二维数组的索引位置。因此二维数组是一个有序的数组。

创建字典

{}创建

字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号( , )分割,整个字典包括在花括号 {}

d = {key1 : value1, key2 : value2, key3 : value3 }

注意:

  • 键必须是唯一的,但值则不必。
  • 值可以取任何数据类型,但键必须是不可变的,如字符串,数字。
tinydict = { 'abc': 123, 98.6: 37 }

内建函数dict()创建字典

使用dict() 创建字典

emptyDict = dict()

访问字典里的值

通过访问键的值访问字典的值

tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
print ("tinydict['Name']: ", tinydict['Name'])  #tinydict['Name']:  Runoob

如果访问的值没有,会报错KeyError

tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

print ("tinydict['Alice']: ", tinydict['Alice'])
​
# Traceback (most recent call last):
#  File "main.py", line 17, in <module>
#    print("tinydict['Alice']: ", tinydict['Alice'])
# KeyError: 'Alice'

修改字典

向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值

tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

tinydict['Age'] = 8               # 更新 Age
tinydict['School'] = "天天学习"  # 添加信息


print ("tinydict['Age']: ", tinydict['Age'])    # tinydict['Age']:  8
print ("tinydict['School']: ", tinydict['School'])  # tinydict['School']:  天天学习

删除字典元素

删除键值对

用del删除键值对

tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
del tinydict['Name'] # 删除键 'Name'print(tinydict) # {'Age': 7, 'Class': 'First'}

清空字典

clear()函数清空字典,删除字典内的全部元素

tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
tinydict.clear()

print(tinydict) # {}

删除字典

使用del删除字典,之后对其的访问都是违法的

tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
del tinydict
​
print(tinydict)
​
# Traceback (most recent call last):
#  File "main.py", line 18, in <module>
#    print(tinydict)
# NameError: name 'tinydict' is not defined

特性

字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。

  • 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
  • 键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行
  • 字典中的元素是无序的
  • 字典会浪费较大的内存,是一种使用空间换时间的数据结构。(因为哈希表中有空的格子)