字典
字典(Dictionary) 是Python中的一种数据类型,用来存储键(key)值(value)对。字典数据能够使用键名快速取回、添加、删除、编辑值。字典和其他语言中的数组(array)或者哈希表(hash)非常相似。字典是可变(mutable)序列。
创建字典
与创建列表类似,创造字典的常用方法也有多种。只了解和掌握单一的创建方法并不能应对实际工作需求。
创造字典的常用方式
- 使用
{}
,例如{"id":2,"name":"小明"}
。 - 使用
dict()
函数(也叫构造函数),例如dict(name='小明', id=2)
。 - 使用字典推导式,
{key:value for key,value in iterable (if condition) }
。
字典键名和值的要求
- 键名数据类型必须是不可变的。通常为字符串。
- 字典中的键名必须是唯一的。
- 值可以是任意类型。
使用{}
创建字典
= {
friends 'tom' : '66666666',
'jerry' : '88888888'
}
使用花括弧 {}
就可创建字典。字典中的每一个项目都由键名、冒号:
和值组成,多个项目之间用逗号,
分割。
使用dict
函数和键值对创建字典
dict(name='小明', age=19, gender='男')
"""
{'name': '小明', 'age': 19, 'gender': '男'}
"""
这种方式代码量小,但键必须都是字符串。
使用dict
函数和列表组合创建字典
= ['小明','小丽']
name = ['男','女']
gender dict(zip(name,gender))
"""
{'小明': '男', '小丽': '女'}
"""
使用字典推导式创建字典
= ['小明','小丽','小强']
name = ['男','女','男']
gender for name,gender in zip(name,gender) if gender=='男'}
{ name:gender """
{'小明': '男', '小强': '男'}
"""
字典推导式的语法如下:
= { key: value for key, value in iterable (if 语句) } D
字典推导式的优势在于它可以包含 if
语句,所以在筛选数据上面有很大的灵活性。
获取、修改和添加字典元素
获取字典内容
'key'] dictionary_name[
例如:
>>> friends['tom']
'66666666'
如果字典中存在指定的键名,则返回对应的值,否则抛出键名异常。
添加和编辑字典项目
'newkey'] = 'newvalue' dictionary_name[
例如:
>>> friends['bob'] = '99999999'
>>> friends
'jerry': '88888888', 'bob': '99999999', 'tom': '66666666'} {
删除字典项目
del dictionary_name['key']
例如:
>>> del friends['bob']
>>> friends
'tom': '66666666', 'jerry': '88888888'} {
遍历字典
数据分析中经常使用需要遍历字典,查找符合某个条件的内容。
遍历字典key
= {
dict1 '小明': 98,
'小兰': 86,
'小红': 89,
}for key in dict1:
print(key)
"""
小明 小兰 小红
"""
for key in dict1.keys():
print(key)
"""
小明 小兰 小红
"""
遍历字典value
= {
dict1 '小明': 98,
'小兰': 86,
'小红': 89,
}for key in dict1.keys():
print(key)
"""
小明 小兰 小红
"""
遍历字典key和value
= {
dict1 '小明': 98,
'小兰': 86,
'小红': 89,
}for key, value in dict1.items():
print(F'Key: {key}, Value: {value};')
"""
Key: 小明, Value: 98;
Key: 小兰, Value: 86;
Key: 小红, Value: 89;
"""
for kv in dict1.items():
print ('kv is : ',kv)
"""
kv is : ('小明', 98)
kv is : ('小兰', 86)
kv is : ('小红', 89)
"""
字典比较
判断两个字典中是否包含相同项目
使用 ==
和 !=
操作符判断字典是否包含相同的项目。
>>> d1 = {"mike":41, "bob":3}
>>> d2 = {"bob":3, "mike":41}
>>> d1 == d2
True
>>> d1 != d2
False
>>>
不能使用其它的关系操作符(<
, >
, >=
, <=
)比较字典类型变量。
字典常用方法
Python提供了多个内置的方法,用来操作字典,常用方法见下表:
方法名 | 方法用途 |
---|---|
popitem() |
返回并移除字典中的任意项目 |
clear() |
删除字典中的所有项目 |
keys() |
以元组的形式获得字典的键名 |
values() |
以元组的形式获得字典的值 |
get(key) |
获得指定键名对应的值 |
pop(key) |
移除指定键名的项目 |
>>> friends = {'tom': '111-222-333', 'bob': '888-999-666', 'jerry': '666-33-111'}
>>> friends.popitem()
'tom', '111-222-333')
(
>>> friends.clear()
>>> friends
{}
>>> friends = {'tom': '111-222-333', 'bob': '888-999-666', 'jerry': '666-33-111'}
>>> friends.keys()
'tom', 'bob', 'jerry'])
dict_keys([
>>> friends.values()
'111-222-333', '888-999-666', '666-33-111'])
dict_values([
>>> friends.get('tom')
'111-222-333'
>>> friends.get('mike', 'Not Exists')
'Not Exists'
>>> friends.pop('bob')
'888-999-666'
>>> friends
'tom': '111-222-333', 'jerry': '666-33-111'} {
字典排序
字典的排序,可以使用sorted()
函数,语法如下:
sorted(iterable,key,reverse)
iterable
表示可以迭代的对象,例如可以是dict.items()
、dict.keys()
等;key
是一个函数,用来选取参与比较的元素;reverse
则是用来指定排序是倒序还是顺序,reverse=true
则是倒序,reverse=false
时则是顺序,默认时reverse=false
。
sorted函数按key值对字典排序
直接使用sorted(d.keys())
就能按key值对字典排序,这里是按照顺序对key
值排序的,如果想按照倒序排序的话,则只要将reverse
置为true
即可。
= {'borisakunin': 4691, 'doctor_liza': 3046, 'tareeva': 2970, 'cheger': 2887, 'karial': 2717, 'snorapp': 2707, 'masha_koroleva': 2683, 'elladkin': 2616, 'samoleg': 2597}
dd >>> sorted(dd.keys())
'borisakunin', 'cheger', 'doctor_liza', 'elladkin', 'karial', 'masha_koroleva', 'samoleg', 'snorapp', 'tareeva']
[>>> sorted(dd.keys(),reverse=True)
'tareeva', 'snorapp', 'samoleg', 'masha_koroleva', 'karial', 'elladkin', 'doctor_liza', 'cheger', 'borisakunin'] [
sorted函数按value值对字典排序
要对字典的value
排序则需要用到key
参数,常使用lambda表达式的方法,如下:
>>> sorted(dd.items(),key=lambda item:item[1])
'samoleg', 2597), ('elladkin', 2616), ('masha_koroleva', 2683), ('snorapp', 2707), ('karial', 2717), ('cheger', 2887), ('tareeva', 2970), ('doctor_liza', 3046), ('borisakunin', 4691)]
[(
>>> sorted(dd.items(),key=lambda item:item[1],reverse=True)
'borisakunin', 4691), ('doctor_liza', 3046), ('tareeva', 2970), ('cheger', 2887), ('karial', 2717), ('snorapp', 2707), ('masha_koroleva', 2683), ('elladkin', 2616), ('samoleg', 2597)] [(
这里的dd.items()
实际上是将dd
转换为可迭代对象,items()
方法将字典的元素转化为了元组,而这里key
参数对应的lambda
表达式的意思则是选取元组中的第二个元素作为比较对象,如果写作key=lambda item:item[0]
的话则是选取第一个元素作为比较对象,也就是key
值作为比较对象。
注意排序函数sorted()
返回值是一个list
,而原字典中的名值对被转换为了list
中的元组。