2013-07-15 13 views
14

Ich habe ein WörterbuchEntfernen Schlüssel aus Wörterbuch in Python Rückkehr neues Wörterbuch

d = {'a':1, 'b':2, 'c':3} 

Ich brauche einen Schlüssel zu entfernen, sagen c und schicken Sie das Wörterbuch ohne diesen Schlüssel in einem Funktionsaufruf

{'a':1, 'b':2} 

d.pop ('c') gibt den Schlüsselwert - 3 - anstelle des Wörterbuchs zurück.

Ich werde eine Funktion Lösung brauchen, wenn es vorhanden ist, da dies

+0

'd.pop ('c') zurück d '? –

+0

@VictorCastilloTorres, gibt es den Wert von 'c', die in diesem Fall 3 ist. – Xeos

+0

Ich denke, dass es nicht 'True' ist, denn zuerst entfernst du den Wert von' c' und jetzt 'd = {'a': 1, 'b': 2}' und wenn du 'd' zurücksendest, wird '' zurückgeben {'a': 1, 'b': 2} ' –

Antwort

15

Wie wäre es damit in Comprehensions gehen:

{i:d[i] for i in d if i!='c'} 

Es Dictionary Comprehensions genannt und es ist seit Python 2.7 verfügbar.

oder wenn Sie mit Python älter als 2.7:

dict((i,d[i]) for i in d if i!='c') 
+0

Ja, funktioniert total. Ich habe es mit zu arbeiten: 'dict (set (d.items()) - {('c', 0)})' Aber es ist, weil ich den Wert wusste, den das 'c' nehmen wird. Ihre Lösung ist mehr .. umfassende – Xeos

+0

Die Leistung bei kleinen Datensätzen (was ich arbeiten muss) ist ungefähr gleich. – Xeos

+0

'dict ((i, d [i]) für i in d, wenn i! = 'C') - Brownie weist darauf hin, dass keine andere Zwischenliste/Tupel erstellt wurde :) – haridsv

5

Warum nicht Ihre eigene Rolle? Dies wird wahrscheinlich schneller als eine neue mit dem Wörterbuch Comprehensions erstellen:

def without(d, key): 
    new_d = d.copy() 
    new_d.pop(key) 
    return new_d 
+0

Ja, das ist eine Lösung. Leider stecke ich mit einheimischen Methoden fest und kann keine eigenen hinzufügen. Aber das würde total funktionieren. – Xeos

+1

Nur aus Neugier, wie kann man seine eigenen Funktionen nicht definieren? –

+0

Es ist eine Aufgabe, die ich ausfüllen muss, nur mit Hilfe von Comprehensions und nativen Funktionen, also auch keine externen Module. – Xeos

0

dies funktionieren wird,

(lambda dict_,key_:dict_.pop(key_,True) and dict_)({1:1},1) 

EDIT dies den Schlüssel fallen, wenn im Wörterbuch vorhanden und wird das Wörterbuch zurück, ohne Der Schlüssel, das Wertpaar

In Python gibt es Funktionen, die ein Objekt an Ort und Stelle ändern und einen Wert anstelle des geänderten Objekts zurückgeben, die Funktion {} .pop ist ein Beispiel. (Obj: (func (obj) und False) oder obj Lambda func) dieses Verhalten zu ändern, und ein das erwartete Verhalten bekommen

können wir eine Lambda-Funktion wie in dem Beispiel, oder allgemeinere unter verwenden.

+0

"Ihre Antwort ist sicherlich eine kleine Erklärung wert. Wenden Sie sich bitte an http://StackOverflow.com/Help/how-to-answer. Kommentare würden dabei helfen, durchsuchbare Inhalte zu erstellen. " –

Verwandte Themen