Удалить все значения в списке в словаре - PullRequest
0 голосов
/ 22 октября 2018

Я не могу понять, как удалить все элементы из списка в словарном ключе.

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 голосов
/ 22 октября 2018

Почему бы просто не получить ключи в новый список, удалить старый 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 []
0 голосов
/ 22 октября 2018

без перестройки нового словаря, зациклите значения и примените к ним list.clear, так как вы знаете, что они списки:

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

Также избегайте ложно-хорошая идеяиспользования pieces = dict.fromkeys(pieces,[]), так как списки изменчивы, и вы получите один и тот же список для всех ключей (классическая ошибка колотящейся головы).Это работало бы для неизменных значений, таких как целые числа или строки, но не для списков.

0 голосов
/ 22 октября 2018

Полагаю, хорошим решением может быть:

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': []}
0 голосов
/ 22 октября 2018

Вы можете просто переназначить все значения в пустой список

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

или

for k in pieces:
    pieces[k].clear()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...