Python基础之字典操作

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'}
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页