删除字典列表中的所有值

时间:2018-10-22 19:39:03

标签: python python-3.x list 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]

和其他各种无法解决的随机问题。我需要它仍然具有所有键和'[]'作为值,而里面没有元素

4 个答案:

答案 0 :(得分:3)

您只需将所有值重新分配到一个空列表中

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

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

答案 1 :(得分:3)

无需重建新字典,就可以遍历值并在其上应用list.clear,因为您知道它们是列表:

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

避免使用pieces = dict.fromkeys(pieces,[])的假冒好主意,因为列表是可变的,并且所有键的列表最终都相同(经典的敲打头错误)。不过,这对于整数或字符串之类的不可变值很有用,但对于列表却无效。

答案 2 :(得分:-1)

我想一个好的解决方案可能是:

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': []}

答案 3 :(得分:-2)

为什么不只是将键放入新列表,而是删除旧字典并使用默认值 [] 创建新字典,如下所示:

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