[英]How to create a list containing N Lists each containing N distinct dictionaries using comprehension syntax?
oneCounts = [[{'l':0,'r':0,'t':0,'b':0}] * N for i in range(0,N)]
oneCounts[0][1]['t'] = 3
在上面的代碼中,在特定字典上設置鍵值會導致同一列表中的所有字典將它們的 t 鍵值設置為相同的值。 這出乎我的意料。 我錯過了什么?
將第一行更改為
oneCounts = [[{'l':0,'r':0,'t':0,'b':0} for _ in range(N)] for i in range(0, N)]
# oneCounts = [[{'l':0,'r':0,'t':0,'b':0} for _ in range(N)] for _ in range(N)]
為了創建獨立的詞典。
[x] * n
創建一個包含對同一對象x
的 n 個引用的列表。 您應該只在x
是不可變類型時使用該語法,例如int
。
意外結果背后的原因是您只調用了一次構造函數,然后使用了 N 次相同的對象。 因此,實際上,您向oneCounts追加了 N 次相同的對象,因為包含字典的列表具有相同的引用。
嘗試以下操作:
oneCounts = []
for i in range(N):
oneCounts.append([{'l':0,'r':0,'t':0,'b':0} for j in range(N)])
這里, oneCounts是一個包含 N 個列表的列表,每個列表包含 N 個單獨的字典。
編輯:我剛剛注意到用戶“schwobaseggl”給出的答案。 它和我的代碼做同樣的事情,但輸入更少。 我個人更喜歡這個答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.