Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除字典中列表中的所有值_Python_Python 3.x_List_Dictionary - Fatal编程技术网

Python 删除字典中列表中的所有值

Python 删除字典中列表中的所有值,python,python-3.x,list,dictionary,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],

我似乎不知道如何删除字典键列表中的所有元素

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

为什么不把这些键放到一个新的列表中,删除旧的dict并创建一个默认值为[]的新字典,如下所示

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

为self.pieces中的k:self.pieces[k]=[]
?@coldspeed我觉得自己太蠢了。。。第一条评论是解决方案。很抱歉浪费时间:/。那么成功修改后,
self.parties
应该是什么样子?@chepner
dict={'P1':[],'P2':[]}
如果只需要重置值,我不会重新创建整个内容<对于self.pieces:self.pieces[k].clear()
中的k,代码>也会起作用。@coldspeed在您的注释中添加了这一点:)只是指出,如果任何其他代码引用这些值,它们实际上是不同的。@wim可以在注释中添加编辑,你的知识面比我多一点I@wim我确实有使用这些值的代码。这就是你所说的引用吗?如果是这样的话,这会导致问题吗?不,不(请参阅我答案的最后一条评论)“避免使用pieces=dict.fromkeys(pieces,[])的假好主意,因为列表是可变的,最终所有键都会有相同的列表”同意。我的错。可能使用了
.clear()
。谢谢你指出。
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 []