1
mylist = [{"a" : 1, " b" : 2}, {"c" : 1, "d" :2}] 

Meine Liste geht so etwas. Wie lösche ich das gesamte Wörterbuch, das den Schlüssel 'a' enthält?Wie lösche ich ein ganzes Wörterbuch in einer Liste?

+0

Ist dies immer das erste Wörterbuch? Was ist, wenn es zwei Wörterbücher mit einem Schlüssel "a" gibt? –

+3

'{d für d in meiner Liste, wenn 'a' nicht in d}'? –

+0

Versuchen wir zuerst mit 'wenn es nur ein Wörterbuch mit dem Schlüssel' a 'gibt.' Ich bin ein Anfänger in Python und würde gerne langsam bewegen und gut verstehen, wie ich gehe –

Antwort

1

Sie auch filter verwenden können, um dieses Problem zu lösen:

mylist = [{"a" : 1, " b" : 2}, {"c" : 1, "d" :2}] 
new_list = list(filter(lambda x: "a" not in x, mylist)) 

Ausgang:

[{'c': 1, 'd': 2}] 

Bezüglich Ihres letzten Kommentars, ein Wörterbuch mit dem Wert "Apfel" zu löschen:

mylist = [{"a" : "apple", "b" : "orange"}, {"c" : "pineapple", "d" : "mango"}] 
final_list = list(filter(lambda x:"apple" not in x.values(), mylist)) 
+0

Works perfekt. Danke, ich habe eine Nachfolgefrage, Wenn meine Liste so etwas geht, mylist = [{"a": Apfel, "b": orange}, {"c": Ananas, "d": Mango }] Wie würde ich das Wörterbuch löschen, das das Wort "Apfel" enthält? –

+0

@AbrahamKnaphih siehe bitte meine letzte Änderung. – Ajax1234

+0

Perfekt. Ich danke dir sehr. Ich suchte viel Google, um eine klare Erklärung und eine Antwort zu erhalten. Jetzt weiß ich. Danke –

5

können Sie verwenden Liste Verständnis eine neue Liste mit den dict s ohne 'a' Schlüssel zu erstellen:

>>> mylist = [{"a" : 1, " b" : 2},{"c" : 1, "d" :2}] 

>>> [d for d in mylist if 'a' not in d] 
[{'c': 1, 'd': 2}] 

Wenn es Muss die Elemente aus der ursprünglichen Liste zu löschen, können Sie dann kann so etwas wie:

>>> mylist = [{"a" : 1, " b" : 2},{"c" : 1, "d" :2}] 

#       v Iterate over the copy of the list, 
#       v so that the change in index after the 
#       v deletion of elements in the list won't 
#       v impact the future iterations 
>>> for i, d in enumerate(list(mylist)): 
...  if 'a' in d: 
...   del mylist[i] 
... 
>>> mylist 
[{'c': 1, 'd': 2}] 
3

In den Kommentaren sagen Sie, dass

I bin ein Anfänger in Python und möchte sich langsam bewegen und gut verstehen, wie ich gehe

Also konzentriere ich mich auf die Erklärungsschritte, anstatt Ihnen einfach die Lösung zu geben.

Der einfachste Weg, um zu überprüfen, ob ein Wörterbuch ein bestimmte Schlüssel enthält in zu verwenden ist: Sie können

>>> d = {'a': 10, 'b': 20} 
>>> 'a' in d 
True 

>>> 'c' in d 
False 

Ebenso prüfen, ob es nicht ein Schlüssel in einem Wörterbuch ist mit not in:

>>> 'c' not in d 
True 

>>> 'b' not in d 
False 

Da Sie sich mit einer Liste von Wörterbüchern beschäftigen, müssen Sie darüber iterieren. Mit Python können Sie über jedes Element iterieren mit for:

>>> list_of_dicts = [{'a': 10, 'b': 20}, {'b': 10, 'c': 20}] 
>>> for subdict in list_of_dicts: 
...  print(subdict) 
... 
{'a': 10, 'b': 20} 
{'b': 10, 'c': 20} 

Also im Grunde Sie nur die for Schleife mit einem Scheck kombinieren müssen, wenn der Schlüssel in die subdict ist. Aber es ist keine gute Idee, zu ändern, was auch immer Sie laufen zur Zeit über, so dass Sie eine neue Liste erstellen könnten die Wörterbücher, die Sie behalten möchten, speichern:

>>> keep_these = [] 
>>> for subdict in list_of_dicts: 
...  if 'a' not in subdict: 
...   keep_these.append(subdict) 
... 
>>> keep_these 
[{'b': 10, 'c': 20}] 

Es gibt eine noch einfachere Möglichkeit, dies in Python zu tun : Ein Listenverständnis. Moinuddin Quadri präsentierte es bereits, aber nur um es zu wiederholen:

>>> [subdict for subdict in list_of_dicts if 'a' not in subdict] 
[{'b': 10, 'c': 20}] 

Dies ist im Wesentlichen genau wie die for Schleife ich oben verwendet, aber es ist kürzer und schneller.

+0

sehr beschreibend, und gut erklärt (+1) –

+0

Danke. Gut erklärt und einfach zu verstehen! –

Verwandte Themen