Fromkeys 注意事项:了解字典初始化的行为
在 Python 中,dict.fromkeys() 方法通常用于创建字典将指定的键分配给空列表。然而,对其行为的误解导致了意想不到的结果。
为什么 fromkeys() 很棘手
当提供空列表 [] 作为 dict 的第二个参数时.fromkeys(),结果字典中的所有值都指向 same 列表对象。这意味着对一个值的任何修改都会影响所有值。
替代解决方案
要解决此问题,建议使用以下解决方案:
使用字典推导式:
在 Python 2.7 或更高版本中,字典推导式是最简洁、可读的解决方案:
data = {k: [] for k in range(2)}
使用列表推导式with dict():
在早期的 Python 版本中,列表理解可以传递给 dict() 构造函数:
data = dict([(k, []) for k in range(2)])
在 dict() 中使用生成器表达式:
在 Python 中2.4-2.6,生成器表达式可以与dict()一起使用,括号可以是省略:
data = dict((k, []) for k in range(2))
示例
以下示例说明了 fromkeys() 的默认行为与推荐解决方案之间的差异:
# Default behavior of fromkeys() data = {} data = data.fromkeys(range(2), []) data[1].append('hello') print(data) # Output: {0: ['hello'], 1: ['hello']} # Using a dictionary comprehension data = {k: [] for k in range(2)} data[1].append('hello') print(data) # Output: {0: [], 1: ['hello']}
通过理解 fromkeys() 的细微差别,开发者可以有效地创建字典空列表并维护单独的键寻址。
以上是为什么 `dict.fromkeys()` 创建共享列表,以及如何避免它?的详细内容。更多信息请关注PHP中文网其他相关文章!