pin_drop当前位置:知识文库 ❯ 图文

Python字典fromkeys()方法

概述

fromkeys() 是字典的类方法,用于根据给定的键序列和默认值创建一个新字典。它常用于初始化字典,将一组键映射到相同的默认值。


语法

代码示例

dict.fromkeys(iterable[, value])
参数 说明
iterable 键的可迭代对象
value 可选,所有键对应的默认值(默认为 None)

返回值:新字典


基本用法

使用列表创建

代码示例

keys = ["name", "age", "city"]
d = dict.fromkeys(keys)
print(d)

输出:

代码示例

{'name': None, 'age': None, 'city': None}

指定默认值

代码示例

keys = ["name", "age", "city"]
d = dict.fromkeys(keys, "未知")
print(d)

输出:

代码示例

{'name': '未知', 'age': '未知', 'city': '未知'}

使用元组创建

代码示例

fields = ("x", "y", "z")
d = dict.fromkeys(fields, 0)
print(d)

输出:

代码示例

{'x': 0, 'y': 0, 'z': 0}

使用字符串创建

代码示例

d = dict.fromkeys("abc", 0)
print(d)

输出:

代码示例

{'a': 0, 'b': 0, 'c': 0}

可变默认值陷阱

当默认值是可变对象(如列表、字典)时,所有键会共享同一个对象:

代码示例

keys = ["a", "b", "c"]
d = dict.fromkeys(keys, [])
d["a"].append(1)
print(d)

输出:

代码示例

{'a': [1], 'b': [1], 'c': [1]}

提示:修改一个键的值,所有键都受影响!因为它们引用同一个列表对象。

正确方式:使用字典推导式

代码示例

keys = ["a", "b", "c"]
d = {k: [] for k in keys}
d["a"].append(1)
print(d)

输出:

代码示例

{'a': [1], 'b': [], 'c': []}

常见应用场景

初始化计数器

代码示例

items = ["apple", "banana", "cherry"]
counts = dict.fromkeys(items, 0)
print(counts)

输出:

代码示例

{'apple': 0, 'banana': 0, 'cherry': 0}

初始化配置

代码示例

options = ["debug", "verbose", "log"]
config = dict.fromkeys(options, False)
print(config)

输出:

代码示例

{'debug': False, 'verbose': False, 'log': False}

去重保留顺序

代码示例

data = ["a", "b", "a", "c", "b", "d"]
unique = list(dict.fromkeys(data))
print(unique)

输出:

代码示例

['a', 'b', 'c', 'd']

注意事项

提示:可变默认值陷阱:使用列表、字典等可变对象作为默认值时,所有键共享同一对象。应使用字典推导式替代。

提示:类方法:fromkeys() 是类方法,通过 dict.fromkeys() 调用,不是实例方法。

提示:值相同:所有键的值都是同一个对象(对于不可变类型无影响)。


小结

  • fromkeys(keys, value) 根据键序列创建新字典

  • 默认值为 None,可自定义

  • 可变默认值会导致所有键共享同一对象,需用推导式替代

  • 常用于初始化计数器、配置和去重


常见问题

fromkeys() 是实例方法还是类方法?

fromkeys() 是类方法,通过 dict.fromkeys() 调用,不需要先创建字典实例。

为什么 fromkeys() 使用可变默认值会有问题?

因为所有键都引用同一个对象实例。修改其中一个键的值,其他键也会受影响。应使用字典推导式为每个键创建独立对象。

fromkeys() 可以用于去重吗?

可以。利用字典键的唯一性,list(dict.fromkeys(data)) 可以在去重的同时保持原始顺序(Python 3.7+)。

fromkeys() 不指定默认值时值是什么?

默认值为 None。所有键的值都是 None。

练习1

使用 fromkeys() 创建一个学生成绩字典,键为学生姓名列表 ["Alice", "Bob", "Charlie"],初始成绩为 0。然后逐个更新每个学生的成绩。

练习2

编写一个函数 init_matrix_dict(rows, cols),使用 fromkeys() 和字典推导式创建一个行号为键、每行为零列表的字典矩阵。注意避免可变默认值陷阱。

标签: 字典方法 fromkeys() 字典初始化 去重 Python教程

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python字典setdefault()方法 下一篇: Python字典copy()方法

poll相关推荐