一文搞定Python字典操作
前言
文章首发于个人公众号:可乐python说
Hi,大家好,我是可乐,今天介绍一下 Python 字典
的相关知识,并附上相关案例代码,便于学习、理解。
字典简介
字典 (Dictionary)
是 Python 中常用的数据结构之一,它用于存放具有映射关系的数据,其灵活性极高,可存储任意类型的数据对象,它有时也被称作关联数组或哈希表。
字典以键值对
的形式存储数据,每个键值对以冒号 :
连接, 冒号左侧为键(key)
,右侧为值(value)
,且键与值都使用单引号 ''
或 双引号""
包裹。
字典使用大括号- {}
包裹,键值对之间使用逗号- ,
分隔,与列表不同,字典中的元素是无序的。
字典支持更新、删除、嵌套、拼接、成员检查、追加、扩展、排序等相关操作,下面我们通过案例来学习。
初识字典
1、使用大括号定义一个空字典。
>>> def_dict = {}
>>> def_dict
{}
# type 查看数据类型
>>> type(def_dict)
<class 'dict'>
2、使用内置方法 dict()
定义一个空字典(推荐使用)。
>>> def_dict = dict()
>>> def_dict
{}
# type 查看数据类型
>>> type(def_dict)
<class 'dict'>
3、字典也可嵌套。
>>> def_dict = {"nesting": {"name": "kele"}}
# 怎么取嵌套字典中的元素
>>> def_dict["nesting"]["name"]
'kele'
4、字典特性之键必须唯一。
>>> def_dict = {"name": "kele", "name": "xuebi"}
>>> def_dict
# 若键不唯一,仅会记录最后一次的值
{'name': 'xuebi'}
5、字典特性之键必须不可变。
# Python 中数字、元组、字符串为不可变类型
# Python 中列表、字典、集合为可变类型
>>> def_dict = {"name": "kele"}
>>> def_dict = {1: "kele"}
>>> def_dict = {("name", "kele"): "kele"}
# 键为可变类型会报错
>>> def_dict = {["name", "kele"]: "kele"}
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unhashable type: 'list'
字典基本操作
1、使用键获取字典中的值。
>>> def_dict = {"name": "kele", "hobby": "Python"}
# 获取 name 的 value
>>> def_dict["name"]
'kele'
# 获取 hobby 的 value
>>> def_dict["hobby"]
'Python'
# key 值不存在会报错
>>> def_dict["age"]
Traceback (most recent call last):
File "<input>", line 1, in <module>
KeyError: 'age'
2、使用 get
方法获取字典中的值。
>>> def_dict = {"name": "kele", "hobby": "Python"}
# 获取 name 的 value
>>> def_dict.get("name")
'kele'
# 获取 hobby 的 value
>>> def_dict.get("hobby")
'Python'
3、使用键更新字典中的值。
>>> def_dict = {"name": "kele"}
# key 存在则修改
>>> def_dict["name"] = "xuebi"
>>> def_dict
{'name': 'xuebi'}
# key 不存在则新增
>>> def_dict["age"] = 18
>>> def_dict
{'name': 'xuebi', 'hobby': 'Python', 'age': 18}
4、使用 del
语句删除字典元素。
>>> def_dict = {"name": "kele", "hobby": "Python"}
>>> del def_dict["hobby"]
>>> def_dict
{'name': 'kele'}
5、使用 in
、not in
判断指定 key 值是否在字典中,是则返回 True,否则返回 False。
>>> def_dict = {"name": "kele"}
# 字典是基于 key 值来判断的
>>> "name" in def_dict
True
>>> "name" not in def_dict
False
字典基础方法
字典基础方法可参照下表:
方法 | 说明 |
---|---|
len(dict) | 计算字典键值对数量 |
str(dict) | 将字典转换为字符串 |
type(dict) | 查看数据类型 |
1、使用 len
方法计算字典长度。
>>> def_dict = {"name": "kele", "hobby": "Python"}
>>> len(def_dict)
2
2、使用 str
方法,将字典转换为字符串。
>>> def_dict = {"name": "kele"}
>>> str(def_dict)
"{'name': 'kele'}"
3、使用 type
方法查看数据类型。
>>> def_dict = {"name": "kele"}
>>> type(def_dict)
# 字典为 dict 类型
<class 'dict'>
字典内置方法
Python
中的 dict
类提供了字典操作相关的内置方法,使用时直接调用即可,下面按照类中方法定义的顺序演示。
1、使用 clear
方法清空字典。
# 使用语法:dict.clear()
>>> def_dict = {"name": "kele"}
>>> def_dict.clear()
>>> def_dict
{}
2、使用 copy
方法复制字典。
# 使用语法:dict.copy()
>>> def_dict = {"name": "kele"}
>>> def_dict.copy()
{'name': 'kele'}
3、使用 fromkeys
方法,创建新字典,以序列 seq
中的元素作为键,以键对应的初始值 value
作为值。
# 使用语法:dict.fromkeys(seq[, value])
>>> seq = ('name', 'age')
# 不指定 value 值,默认为 None
>>> dict.fromkeys(seq)
{'name': None, 'age': None}
# 不指定 value 值
>>> dict.fromkeys(seq, "kele")
{'name': 'kele', 'age': 'kele'}
4、使用 get
方法,获取字典元素。
# 使用语法:dict.get(key, default=None)
>>> def_dict = {"name": "kele"}
>>> def_dict.get("name")
'kele'
# key 值不存在不会报错
>>> print(def_dict.get("age"))
None
# get 方法还可指定默认值
>>> def_dict.get("age", 18)
18
5、使用 items
方法,获取字典所有键值对数据。
# 使用语法:dict.items()
>>> def_dict = {"name": "kele"}
>>> def_dict.items()
# 返回一个 dict_items 对象,可转为列表
dict_items([('name', 'kele')])
>>> list(def_dict.items())
[('name', 'kele')]
6、使用 keys
方法,获取字典所有的键。
# 使用语法:dict.keys()
>>> def_dict = {"name": "kele", "hobby": "Python"}
>>> def_dict.keys()
# 返回一个 dict_keys 对象,可转为列表
dict_items([('name', 'kele')])
>>> list(def_dict.keys())
['name', 'hobby']
7、使用 pop
方法,删除字典指定键的键值对数据,返回删除键对应的值。
# 使用语法:dict.pop(key[,default])
>>> def_dict = {"name": "kele", "hobby": "Python"}
>>> def_dict.pop()
# 必须指定 key 值,否则报错
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: pop expected at least 1 arguments, got 0
# 指定 key 值,返回其对应的值
>>> def_dict.pop("hobby")
'Python'
# key 不存在会报错
>>> def_dict.pop("age")
Traceback (most recent call last):
File "<input>", line 1, in <module>
KeyError: 'age'
# key 不存在,给定默认值可避免报错
>>> def_dict.pop("age", 18)
18
8、使用 popitem
方法,删除字典中最后一个键值对数据并将其返回。
# 使用语法:dict.popitem()
>>> def_dict = {"name": "kele", "hobby": "Python"}
>>> def_dict.popitem()
('hobby', 'Python')
# 原字典变成了这样
>>> def_dict
{'name': 'kele'}
# 再调用一次
>>> def_dict.popitem()
('name', 'kele')
# 字典为空时调用会报错
>>> def_dict.popitem()
Traceback (most recent call last):
File "<input>", line 1, in <module>
KeyError: 'popitem(): dictionary is empty'
9、使用 setdefault
方法,获取字典元素,与 get
方法类似。
# 使用语法:dict.setdefault(key, default=None)
>>> def_dict = {"name": "kele"}
>>> def_dict.setdefault("name")
'kele'
# key 值不存在不会报错
>>> print(def_dict.setdefault("age"))
None
# setdefault 方法也可指定默认值
>>> def_dict.setdefault("age", 18)
18
# 那它与 get 方法有什么区别呢?
>>> def_dict = {"name": "kele"}
# key 不存在时,get 方法不会进行新增操作
>>> def_dict.get("age", 18)
>>> def_dict
{"name": "kele"}
# key 不存在时,setdefault 方法会进行新增操作
>>> def_dict.setdefault("age", 18)
>>> def_dict
{'name': 'kele', 'age': 18}
10、使用 update
方法,更新字典。
# 使用语法:dict.update(dict2)
>>> def_dict = {"name": "kele"}
>>> def_dict2 = {"age": "18"}
>>> def_dict.update(def_dict2)
# 将 def_dict2 中的数据更新至 def_dict 中
>>> def_dict
{'name': 'kele', 'age': '18'}
11、使用 values
方法,获取字典中所有的值。
# 使用语法:dict.values()
>>> def_dict = {"name": "kele", "hobby": "Python"}
>>> def_dict.values()
dict_values(['kele', 'Python'])
>>> type(def_dict.values())
# 返回一个 dict_values 对象,可转为列表
<class 'dict_values'>
>>> list(def_dict.keys())
['kele', 'Python']
字典扩展
1、使用 sorted
函数对字典的键或值进行排序。
>>> def_dict = {"a": 2, "c": 1, "b":3}
# 直接调用,默认对键进行排序
# 返回排序后键组成的列表
>>> sorted(def_dict)
['a', 'b', 'c']
# 使用匿名函数 lambda 按照键排序
>>> sorted(def_dict.items(), key=lambda x:x[0])
[('a', 2), ('b', 3), ('c', 1)]
# 默认为升序,指定为降序
>>> sorted(def_dict.items(), key=lambda x:x[0], reverse=True)
# 使用匿名函数 lambda 按照值排序
>>> sorted(def_dict.items(), key=lambda x:x[1])
[('c', 1), ('a', 2), ('b', 3)]
# 原字典并不会改变
>>> def_dict
{"a": 2, "c": 1, "b":3}
2、使用 sorted
函数对字典组成的列表,进行多个键的排序。
>>> def_list = [{ "name" : "kele", "age" : 18},
{ "name" : "xuebi", "age" : 7 },
{ "name" : "tea", "age" : 20 },
{ "name" : "wine" , "age" : 20}]
# 先按 age 排序,再按 name 排序
# 若 age 相同,再按 name 排序
>>> sorted(def_list,key=lambda x:(x["age"], x["name"]))
[{'name': 'xuebi', 'age': 7},
{'name': 'kele', 'age': 18},
{'name': 'tea', 'age': 20},
{'name': 'wine', 'age': 20}]
总结
- 字典是 Python 中除列表以外, 最灵活的数据结构,工作中也十分常用。
- 定义字典可直接使用大括号-
{}
, 也可选择dict()
方法,后者更加规范。- 字典内置方法均比较常用,其中
get
方法与setdefault
方法类似,区别在于,当字典的键不存在时,后者会新增元素,前者不会。- 文中难免会出现一些描述不当之处(尽管我已反复检查多次),欢迎在留言区指正,也可分享字典相关的知识。
- 原创文章已全部更新至 Github:
https://github.com/kelepython/kelepython
- 本文永久博客地址:
https://kelepython.readthedocs.io/zh/latest/c01/c01_04.html
- 对文章又任何疑问,欢迎前往公众号进一步交流。
本文地址:https://blog.csdn.net/python_coder11/article/details/107362743