文章目录
1.数据类型的划分
不可变数据类型(可哈希):
bool,int,str,tuple
可变数据类型(不可哈希):
list,dict,set
2.字典
字典类似于列表。在列表中,是下标和值的一一对应,且下标只能是整数。字典的这种对应关系更加广泛,下标可以是任意不可变数据类型。
字典包含了下标(称为键)集合与值集合。每一个键都对应一个值。相互对应的键和值被称为键值对(key-value pair),是字典中的一项(item)。
字典所体现的就是键到值的映射。
dict key: 必须是不可变数据类型,可哈希
dict value:任意数据类型
特点
① 查找采用二分查找,查询速度快
② 能够存储大量关系型数据
③ 无序,指的是不能人为排序。但是也不是说每次输出的结果都不同,只是指结果不保证一定与插入顺序一致而已。
CPython 3.6里对dict有个新的实现,使得字典内部存储的顺序不仅仅与key有关,还与插入顺序有关。但是有关并不代表它就一定按照插入顺序依次出现(似乎当字典实现在内存中进行扩展的时候就可能造成结果不一致),只不过表示如果key相同,插入顺序相同,那么结果也是相同的。在此之前,用values和keys方法取到的list仅与key(准确的说是key的__hash__)有关而与插入顺序无关。
作者:Coldwings
链接:https://www.zhihu.com/question/65855807/answer/235423329 来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
3.字典的操作
增
dic = {'name': 'Python', 'age': 28, 'sex': 'female'}
dic['feature'] = 'pithy' # 若键不存在则,添加键值对
dic['age'] = 100 # 若键存在,则修改对应的值
# {'name': 'Python', 'age': 100, 'sex': 'female', 'feature': 'pithy'}
dict.setdefault(key, default=None)
在字典中查找键 key,若 key 存在则保持对应的值不变,并返回对应的值。 若 key 不存在,则插入键值对 key-default,并返回 default 。default 默认值为None。
dic = {'name': 'Python', 'age': 28, 'sex': 'female'}
print(dic.setdefault('age',100)) # 28
print(dic.setdefault('feature','pithy')) # pithy
print(dic) # {'name': 'Python', 'age': 28, 'sex': 'female', 'feature': 'pithy'}
删
dict.pop(key, default)
在字典中删除给定的键 key 所在的键值对,并返回 key 对应的值。 若 key 不存在,则返回default。
dic = {'name': 'Python', 'age': 28, 'sex': 'female'}
print(dic)
print(dic.pop('age')) # 28
print(dic.pop('feature',"don't find")) # don't find
print(dic) # {'name': 'Python', 'sex': 'female'}
dict.popitem()
随机删除并返回一个键值对(一般删除末尾的键值对)
dic = {'name': 'Python', 'age': 28, 'sex': 'female'}
print(dic.popitem()) # ('sex', 'female')
print(dic) # {'name': 'Python', 'age': 28}
print(dic.popitem()) # ('age', 28)
print(dic) # {'name': 'Python'}
del
del dict[key] 删除字典中的以key为键的键值对;del dict删除字典
dic = {'name': 'Python', 'age': 28, 'sex': 'female'}
del dic['name']
print(dic) # {'age': 28, 'sex': 'female'}
del dic
print(dic) # 这里会报错,因为dic已经不存在了
改
dic = {'name': 'Python', 'age': 28, 'sex': 'female'}
dic['name'] = 'life is but a span'
print(dic) # {'name': 'life is but a span', 'age': 28, 'sex': 'female'}
dict.update(dict2)
将 dict2 中的键值对更新到 dict 中去,dic 中已经存在的修改为 dic2 中的值,不存在的就添加键值对
dic = {'name': 'Python', 'age': 28, 'sex': 'female'}
dic2 = {'name': 'life is but a span', 'feature': 'I use python'}
dic.update(dic2)
print(dic)
# {'name': 'life is but a span', 'age': 28, 'sex': 'female', 'feature': 'I use python'}
print(dic2)
# {'name': 'life is but a span', 'feature': 'I use python'}
查
dic = {'name': 'Python', 'age': 28, 'sex': 'female', 1: 'Yes'}
v1 = dic['name']
print(v1) # Python
v2 = dic['feature'] # 当查找的键不存在时,会报错
dict.get(key, default=None)
返回指定键的值,若键值对不存在,则返回 default 。 default 默认为None
dic = {'name': 'Python', 'age': 28, 'sex': 'female', 1: 'Yes'}
print(dic.get('name')) # Python
print(dic.get(1)) # Yes
print(dic.get('feature')) # None
print(dic.get('feature', 'Nothing')) # Nothing
dict.keys()
返回一个可迭代对象,包含字典中所有的键。可以使用 list() 来转化为列表
dic = {'name': 'Python', 'age': 28, 'sex': 'female', 1: 'Yes'}
print(dic.keys(),type(dic.keys()))
# dict_keys(['name', 'age', 'sex', 1]) <class 'dict_keys'>
print(list(dic.keys())) # ['name', 'age', 'sex', 1]
dict.values()
返回一个可迭代对象,包含字典中所有的值。可以用 list() 来转化为列表
dic = {'name': 'Python', 'age': 28, 'sex': 'female', 1: 'Yes'}
print(dic.values(), type(dic.values()))
# dict_values(['Python', 28, 'female', 'Yes']) <class 'dict_values'>
print(list(dic.values())) # ['Python', 28, 'female', 'Yes']
dict.items()
返回一个可迭代对象,包含字典中所有的键值对。可以用 list() 来转化为列表,每个键值对的数据类型都是元祖。
dic = {'name': 'Python', 'age': 28, 'sex': 'female', 1: 'Yes'}
print(dic.items(), type(dic.items()))
# dict_items([('name', 'Python'), ('age', 28), ('sex', 'female'), (1, 'Yes')]) <class 'dict_items'>
print(list(dic.items()))
# [('name', 'Python'), ('age', 28), ('sex', 'female'), (1, 'Yes')]
print(type(list(dic.items())[1])) # <class 'tuple'>
循环遍历
dic = {'name': 'Python', 'age': 28, 'sex': 'female', 1: 'Yes'}
for i in dic: # 默认为遍历字典中的键
print(i, end=' ')
# name age sex 1
print('')
for i in dic.keys():
print(i, end=' ')
# name age sex 1
print('')
for i in dic.values():
print(i, end=' ')
# Python 28 female Yes
print('')
for i in dic.items():
print(i, end=' ')
# ('name', 'Python') ('age', 28) ('sex', 'female') (1, 'Yes')
print('')
for k, v in dic.items():
print(k, v)
'''
name Python
age 28
sex female
1 Yes
'''
其他
dict.fromkeys(seq[], value)
创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。
dic = dict.fromkeys([1, 'life', 'work', True], 'python')
print(dic) # {1: 'python', 'life': 'python', 'work': 'python'}