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中文網其他相關文章!