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
应该是什么样子?@chepnerdict={'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 []