当前位置:首页>python>【python3基础教程】字典(dict)

【python3基础教程】字典(dict)

  • 2026-09-04 02:10:01
【python3基础教程】字典(dict)

1、字典创建

字典是另一种可变容器模型,且可存储任意类型对象,可以看成基于集合的映射。

字典的每个键值对(key:value)对用冒号(:)分隔,每个对之间用逗号(,)分隔,整个字典包括在花括号({})中,格式如下所示:

d = {key1 : value1, key2 : value2 }

注意:键必须是唯一的,但值则不必

值可以取任何数据类型,但键必须是不可变的且唯一,如何字符串、数值或元组。

字典推导式

my_dict = {"name": "Alice", "age": 25, "city": "New York"}# 获取所有键值对,其中值大于 20filtered_dict = {k: v for k, v in my_dict.items() if isinstance(v, int) and v>20}print(filtered_dict)  # 输出: {'age': 25}

基本功能是进行关系映射、成员计数,基于集合的去重。

2、字典访问(查询)

  • 使用键直接访问

    用中括号放入存在的键来取值,如果键不存在字典中会报错

    dict_data = {"name":"zkx","age":7,"class":"first"}print(dict_data["name"]) #输出:zkxprint(dict_data["sex"]) #报错

    注意:如果键不存在,会抛出KeyError

  • 使用get()方法

    get()方法可以安全地访问字典中的值,即使键不存在也不会抛出异常。不存在时还可以返回指定默认值,默认为None。

    dict_data = {"name":"zkx","age":24}print(dict_data.get("name")) #返回zkxprint(dict_data.get("class")) #返回Noneprint(dict_data.get("class","不详")) #返回不详
  • 使用keys()和values()方法

    访问字典所有的键用keys()方法,访问字典所有的值用values()方法。

    dict_data = {"name":"zkx","age":24}print(dict_data.keys()) #返回 dict_keys(["name","age"])print(dict_data.values()) #返回 dict_values(["zkx",24])
  • 使用items()方法

    访问字典所有键值对的视图对象用items(),可以用于遍历字典。

    dict_data = {"name":"zkx","age":24}for key,value in dict_data.items():print(f"{key}:{value}")
  • 使用in操作符

    检查某个键是否存在字典中,可以用in操作符

    my_dict = {"name": "Alice", "age": 25}# 检查键是否存在if "name" in my_dict:print("Key 'name' exists")else:print("Key 'name' does not exist")# 输出: Key 'name' exists
  • 使用setdefault()方法

    setdefault()方法用于获取字典中的值,如果键不存在,则会插入一对键值对,值默认为None。用于判断键不存在字典中,插入新键新值

    my_dict = {"name": "Alice", "age": 25}# 使用 setdefault() 获取值city = my_dict.setdefault("city", "Unknown")print(city)  # 输出: Unknown# 同时也插入了一对city:Unknown# 再次调用时,不会修改值city = my_dict.setdefault("city", "New York")print(city)  # 输出: Unknownprint(my_dict)  # 输出: {'name': 'Alice', 'age': 25, 'city': 'Unknown'}

3、字典更新(增/改)

my_dict = {"name": "Alice", "age": 25}# 增加新键my_dict["sex"] = "男"# 修改旧键值my_dict["name"] = "zkx"# 使用 setdefault() 获取值,键不存在时等同于添加新键值对city = my_dict.setdefault("city", "Unknown")print(city)  # 输出: Unknown# 同时也插入了一对city:Unknown# 再次调用时,不会修改值city = my_dict.setdefault("city", "New York")print(city)  # 输出: Unknownprint(my_dict)  # 输出: {'name': 'Alice', 'age': 25, 'city': 'Unknown'}

注意:字典在迭代循环过程中不能修改其长度,迭代结束后可以修改其长度大小!

4、字典删除

能删除单一的元素也能清空字典,清空只需一项操作。

#!/usr/bin/python3dict = {'Name': 'Nowcoder', 'Age': 7, 'Class': 'First'}del dict['Name'] # 删除键 'Name'dict.clear()     # 清空字典del dict# 删除字典print ("dict['Age']: ", dict['Age'])print ("dict['School']: ", dict['School'])

但这会引发一个异常,因为用执行 del 操作后字典不再存在

注:del()方法后面还会讨论

5、字典应用技巧

  • 关系映射

    对于有多个字段的数据,打印出来可以先用字典存储,然后再拼接可以避免使用多个print()函数。也可以作为多条件判断

    dict_info = {"字段1": "","字段2": "",    ...}...dict_info["字段1"] = 赋值更新实际数据..row_info = ""for k,v in dict_info.item():row_info += f"{k}:{v}\n"print(row_info)
  • 字典映射判断(动态多条件)

    dict_info = {1:'高',2:'中','3':'低'}value = dict_info[1]level = dict_info.get(2,'不详')
  • 字典去重计数

    字典的的键具有唯一性,所以用字典的键不仅可以去重还能用值记录其次数,比单纯的集合去重多了计数和有序性。

    代码示例如下:

    lt = list("abasjkfhjahfkahsaobxjbjksfawas")count_dict = {}# 去重并计数for i in lt:if i in count_dict:count_dict[i] += 1else:count_dict[i] = 1print(count_dict)

    一行去重

    import retext = ",,1690/1690,,"# 一行代码实现result = list(dict.fromkeys(re.findall(r'\d+\.?\d*', text)))print(f"一行代码结果: {result}")
    部分功能说明
    re.findall()提取所有数字返回包含所有匹配项的列表
    r'\d+\.?\d*'正则表达式匹配整数和小数
    dict.fromkeys()去重利用字典键的唯一性
    list()转换类型将字典键转换为列表
  • 字典扩展排序

    # 根据值item[1]排序字典项,reverse=True降序,reverse=False升序sorted_items = sorted(count_dict.items(), key=lambda item: item[1],reverse=True)# 将排序后的项转换回字典sorted_dict = dict(sorted_items)print(sorted_dict)# 根据键item[0]排序字典项,reverse=True降序,reverse=False升序sorted_items = sorted(count_dict.items(), key=lambda item: item[0],reverse=True)# 将排序后的项转换回字典sorted_dict = dict(sorted_items)print(sorted_dict)
  • 字典枚举

    for index, (k, v)  in enumerate(sorted_dict.items()):print(index, k, v)

    sorted(d.items()) 会按键排序(默认升序)返回一个由 (key, value) 组成的列表,然后 enumerate 为每个元素加上索引

  • 字典倒叙

    一次性反转(最简洁)

    d = {'a': 1, 'b': 2, 'c': 3}d_rev = dict(reversed(list(d.items())))   # {'c': 3, 'b': 2, 'a': 1}

    遍历级反转(节省内存)

    for k, v in reversed(d.items()):print(k, v)

      只按键倒序(值保持原位置)

    d_by_key = {k: d[k] for k in sorted(d, reverse=True)}

      按值倒序(常用于排序输出)

    d_by_val = dict(sorted(d.items(), key=lambda kv: kv[1], reverse=True))

      一句话总结dict(reversed(d.items())) 即可得到“倒序字典”;  遍历用 for k, v in reversed(d.items()): 零拷贝。

6、字典操作符

Python 的字典支持多种操作符,用于访问、修改、比较、合并、删除和清空字典。这些操作符提供了强大的功能,可以满足大多数字典操作的需求。以下是总结:

操作符功能示例
[]访问字典中的值dict[key]
=添加或修改键值对dict[key]=value
in检查键是否存在key in dict
not in检查键是否不存在key not in dict
==比较两个字典是否相等dict1 == dict2
!=比较两个字典是否不相等dict1 != dict2
|合并两个字典dict1|dict2
|=合并更新字典dict1|=dict2
del删除键值对或字典del dict[key]
clear()清空字典dict.clear()

7、字典键的特性

字典值可以是任何类型的python对象,既可以是标准的对象,也可以是用户定义的,但是键不行。

键的特性

  • 唯一性:一个键被赋值两次,值会被覆盖更新

  • 不可变类型:可以用字符串、元组或数值,但是不能列表这些

8、字典内置函数方法

全局函数(与字典相关)

1、len():计算字典元素个数,即键的总数

2、str():字典转换为字符串

3、type:返回数据类型

内置方法

  • dict[key] = value:添加或更新键值对。

  • del dict[key]:删除键值对。

  • dict.pop(key, default=None):删除并返回键值对。

  • dict.popitem():删除并返回最后一对键值对。

  • dict.clear():清空字典。

  • dict.get(key, default=None):获取键的值。

  • key in dict:检查键是否存在。

  • dict.keys():返回所有键的视图。

  • dict.values():返回所有值的视图。

  • dict.items():返回所有键值对的视图。

  • dict.update(other):更新字典。

  • dict1 | dict2:合并字典(Python 3.9+)。

  • dict1 |= dict2:更新字典(Python 3.9+)。

  • dict.fromkeys(keys, value=None):创建新字典。

  • dict.setdefault(key, default=None):设置默认值。

最新文章

随机文章