Biorąc pod uwagę słownik z listami jako wartości.

myDict = {0: [0, 1, 2], 1: [], 2: [20, 25, 26, 28, 31, 34], 3: [], 4: [0, 1, 2, 3, 4, 7, 10], 5: [], 6: [10, 20, 24]}

Jak mogę usunąć elementy ze słownika, jeśli lista wartości jest pusta?

Próbowałem iterować po słowniku i usunąć elementy, ale rozmiar słownika nie może zmieniać się podczas iteracji.

for item in myDict:
    if myDict[item] == []:
        print item
        del myDict[item]
3
ustroetz 27 listopad 2013, 21:41

2 odpowiedzi

Najlepsza odpowiedź

Korzystając z DICT Rozumienie:

>>> myDict = {0: [0, 1, 2], 1: [], 2: [20, 25, 26, 28, 31, 34], 3: [], 4: [0, 1, 2, 3, 4, 7, 10], 5: [], 6: [10, 20, 24]}
>>> myDict = {k: v for k, v in myDict.items() if v}
>>> myDict
{0: [0, 1, 2], 2: [20, 25, 26, 28, 31, 34], 4: [0, 1, 2, 3, 4, 7, 10], 6: [10, 20, 24]}

Dodanie, usuwanie zgłoszeń słownika nie są dozwolone podczas itracji go. Zrób kopię kluczy, aby go pokonać. Na przykład, w następujący sposób użyłem tuple(myDict), aby uzyskać kopię kluczy.

>>> myDict =  {0: [0, 1, 2], 1: [], 2: [20, 25, 26, 28, 31, 34], 3: [], 4: [0, 1, 2, 3, 4, 7, 10], 5: [], 6: [10, 20, 24]}
>>> for item in tuple(myDict):
...     if myDict[item] == []:
...         del myDict[item]
...
>>> myDict
{0: [0, 1, 2], 2: [20, 25, 26, 28, 31, 34], 4: [0, 1, 2, 3, 4, 7, 10], 6: [10, 20, 24]}
5
falsetru 27 listopad 2013, 17:58
for k in myDict.keys():
  if myDict[k] == []:
    del myDict[k]

Spowoduje to usunięcie dowolnego klucza, dla którego wartość jest i pusta tablica.

0
Schechter 27 listopad 2013, 18:08