字典保存的数据是键值对,每一项包含一个key和一个value。key和value一一对应。这个与Java中的map比较相像,感兴趣的同学可以去自行了解一下。
字典的首要特点是查找速度快,且查找速度与元素个数无关,而list的查找速度随元素的增加而逐渐下降。但dict的缺点是占用内存大,且会浪费很多内容,list相反,占用内存小,但是查找速度慢。
在Python3.5之前,dict中的元素是无序的,也就是dict中元素的插入顺序和打印顺序未必一致。但是在Python3.6、Python3.7版本中,却得到了有序的结果。为什么在不同的版本中,会得到不一样的结果呢?这是因为底层的实现发生了改变,我们可以认为在Python3.6的版本以后,dict是有序的,但是一般而言,为了避免不必要的误解,一般在需要有序的dict时,我们会使用一种叫做Ordereddict的字典,来确保有序。
在字典中,key不能重复,且key不可变,所以对于基础数据类型,字符串、数字等,这些都是不可变的,可以作为dict的key,而对于复杂数据类型,tuple是不可变的,list是可变的,因此tuple可以作为dict的key,但是list不可以作为dict的key,否则将会报错。
定义:
字典名 = { key1 : value , key2 : value2 , key3 : value3 , .....}
如何定义空字典?
d = dict()
字典中是通过key来查找相应的。通过 字典名[key],就可以查询到对应的value值。
在字典中如果用来查询的key不存在时,代码会报错。
所以推荐在使用key查询对应的value值时,先判断key是否存在。
# coding = utf-8
d = {
'Alice': 45,
'Bob': 60,
'Candy': 75,
'David': 86,
'Ellena': 49,
'Gaven' : 86
}
if 'Alice' in d:
print(d['Alice'])
else:
print('此key值不存在')
还有一种方法:get方法获得对应key的值。
# coding = utf-8
d = {
'Alice': 45,
'Bob': 60,
'Candy': 75,
'David': 86,
'Ellena': 49,
'Gaven' : 86
}
if 'Alice' in d:
print(d.get('Alice'))
else:
print('此key值不存在')
当key不存在时,get方法不会报错而是返回None,所以更加推荐使用get方法来获取dict的元素。
向字典中添加新键值对时,只需要利用赋值语句的形式就可以。
# coding = utf-8
d = {'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49}
print(d)
d['xiaokangxiaobai'] = '小康小白'
print(d)
字典中value对应的值可以是任意类型的元素,例如基本的数据类型还有List,tuple,包括字典等。
Python更新dict元素
与向字典中添加新元素相同,使用赋值语句就好,格式也相同,这里小白就不详细说了。
放个示例代码:
# coding = utf-8
d = {
'Alice': [45],
'Bob': [60],
'Candy': [75],
}
#使用赋值语句向字典中添加新键值对时,应当先判断该key在字典中是否存在,否则原本的
新增就变成了修改
if 'Alice' in d:
d['Alice'] = ['xiaokangxiaobai']
else:
print('此key不存在')
Pyhton删除dict元素
方法:pop()方法
只需要在pop的参数中填入key,就可以删除对应的键值对,并返回对应的value。
但需要注意的是当key不存在时,调用pop方法删除会报错。
字典的key()方法
无需参数,返回dict的所有key。
dict的遍历方法
1. 遍历dict的所有key,并通过key获得对应的value。
d = {
'Alice': 45,
'Bob': 60,
'Candy': 75,
'David': 86,
'Ellena': 49
}
for key in d: # 遍历d的key
value = d[key]
if value > 60:
print(key, value)
通过dict提供的items()方法,items()方法会返回dict中所有的元素,每个元素包含key和value。
for key, value in d.items():
if value > 60:
print(key, value)
获取dict所有的value
values()函数,可以返回dict中所有的value。
清除所有元素
clear()函数,可以直接清除dict中所有的元素。