簡體   English   中英

如何使用理解語法創建一個包含 N 個列表的列表,每個列表包含 N 個不同的字典?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM