簡體   English   中英

刪除字典列表中的所有值

[英]Delete all values in a list in a dictionary

我似乎無法弄清楚如何從字典鍵的列表中刪除所有元素。

self.pieces = {
        'P1': [1, 0],
        'P2': [[1, 0], [0, 1]],
        'P3': [1, 0],
        'P4': [1, 0],
        'P5': [1, 0],
        'P6': [[1, 0], [1, 0], [1, 0]],
        'P7': [1, 0],
        'P8': [1, 0],
        'R1': [1, 0],
        'N1': [1, 0],
        'B1': [[1, 0], [1, 0]],
        'Q': [1, 0],
        'K': [1, 0],
        'B2': [1, 0],
        'N2': [1, 0],
        'R2': [1, 0],
    }

我努力了:

for i in self.pieces:
   filter(lambda a: a == '[]', self.pieces[i])

也:

  for i in self.pieces:
      for j in i:
           del self.pieces[i][0]

以及其他各種無法解決的隨機問題。 我需要它仍然具有所有鍵和'[]'作為值,而內部沒有元素

您可以簡單地將所有值重新分配給一個空列表

pieces = {k : [] for k in pieces}

要么

for k in pieces:
    pieces[k].clear()

無需重新list.clear新詞典,請在值上循環並應用list.clear它們,因為您知道它們是列表:

for v in pieces.values():
    v.clear()

還要避免使用pieces = dict.fromkeys(pieces,[])的假冒好主意,因為列表是可變的,並且所有鍵的列表最終都相同(經典的敲打頭錯誤)。 不過,這對於不可變的值(例如整數或字符串)有效,但對列表無效。

我想一個好的解決方案可能是:

pieces = {
        'P1': [1, 0],
        'P2': [[1, 0], [0, 1]],
        'P3': [1, 0],
        'P4': [1, 0],
        'P5': [1, 0],
        'P6': [[1, 0], [1, 0], [1, 0]],
        'P7': [1, 0],
        'P8': [1, 0],
        'R1': [1, 0],
        'N1': [1, 0],
        'B1': [[1, 0], [1, 0]],
        'Q': [1, 0],
        'K': [1, 0],
        'B2': [1, 0],
        'N2': [1, 0],
        'R2': [1, 0],
    }

for p in pieces: 
  pieces[p] = []

print(pieces)

輸出是

{'P1': [], 'P2': [], 'P3': [], 'P4': [], 'P5': [], 'P6': [], 'P7': [], 'P8': [], 'R1': [], 'N1': [], 'B1': [], 'Q': [], 'K': [], 'B2': [], 'N2': [], 'R2': []}

為什么不只是將密鑰放入新列表,刪除舊字典並使用默認值[]創建新字典,如下所示

key_list = [ i for i in pieces.keys() ] # Get the keys into a new list
del pieces                              # Delete the dictionary
pieces=dict.fromkeys(key_list, [])      # Create a new dict from key_list and default value []

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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