Erstellen Sie ein Python-dictionary mit bestimmten Schlüssel–Wert-Paare aus einem anderen Wörterbuch
Ich habe einige code, der etwa wie folgt aussieht:
d = {'foo': True, 'bar': 42, 'baz': '!'}
a = {'foo': d['foo'], 'bar': d['bar']}
b = {'foo': d['foo'], 'baz': d['baz']}
c = {'bar': d['bar'], 'baz': d['baz']}
Sicherlich gibt es einen besseren Weg, um dies auszudrücken. Ich habe tatsächlich die Dokumentation Lesen, in der Hoffnung, dass ein Wörterbuch - copy
- Methode akzeptiert die Schlüssel werden in das neue Wörterbuch:
# I'd hoped that something like this would work...
a = d.copy('foo', 'bar')
b = d.copy('foo', 'baz')
c = d.copy('bar', 'baz')
Ich könnte eine Funktion schreiben, die für diesen Zweck:
copydict = lambda dct, *keys: {key: dct[key] for key in keys}
a = copydict(d, 'foo', 'bar')
b = copydict(d, 'foo', 'baz')
c = copydict(d, 'bar', 'baz')
Gibt es eine bessere Lösung als die oben genannten?
Warum verwenden nicht Sie eine Liste (oder ein set) für a,b,c? Sie kalten Blick der Wert in d, wenn Sie es brauchen.
Ich bin tatsächlich vorbei
schreiben Sie eine Antwort, die nur "Nein". (pad, um die minimale Größe mit einem HTML-Kommentar), so dass wir alle wahnsinnig Abstimmung.
möglich, Duplikat der beste Weg, um zu extrahieren Teilmenge von Schlüssel-Wert-Paare aus python-dictionary-Objekt
Falls du interessiert bist, ich habe eine Frage, über die man besser nicht kopieren: stackoverflow.com/questions/9329537/...
Ich bin tatsächlich vorbei
a
, b
, und c
zu Django ' s urlencode
- Funktion (die, wie urllib.urlencode
, nimmt ein Wörterbuch).schreiben Sie eine Antwort, die nur "Nein". (pad, um die minimale Größe mit einem HTML-Kommentar), so dass wir alle wahnsinnig Abstimmung.
möglich, Duplikat der beste Weg, um zu extrahieren Teilmenge von Schlüssel-Wert-Paare aus python-dictionary-Objekt
Falls du interessiert bist, ich habe eine Frage, über die man besser nicht kopieren: stackoverflow.com/questions/9329537/...
InformationsquelleAutor davidchambers | 2012-02-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dass die Funktion in der Frage ist die beste Lösung.
Natürlich, jemand könnte nach einigen idiomatischen code, aber ich bin sicher, es würde nicht funktionieren, besser/schneller. Iteration über eine Liste und erste Elemente aus einem dict-by-Taste ist so schnell, wie es bekommen kann.
Einen Vorschlag ist, entfernen Sie die Sterne vom
keys
parameter. Argument Auspacken, fügt einen unnötigen overhead. Es sollte kein problem mit nur auf der Durchreise diese Tasten als ein Tupel.InformationsquelleAutor Oleh Prypin
Die einzige Verbesserung, die ich machen würde, ist die Verwendung einer echten definition einer Funktion, nicht eine lambda:
Könnte es sinnvoll sein, Angebot mit fehlenden Tasten, aber in Python 2 Sie können nicht mischen Schlüsselwort optional Argumente mit *args schön, so dass Sie möglicherweise zu gehen, um ein Tupel argument:
InformationsquelleAutor Ned Batchelder
Wie bereits von @BlaXpirit, ist diese Lösung wahrscheinlich nicht gehen, um besser sein als der ihrige in Bezug auf die Geschwindigkeit oder die Lesbarkeit, aber Sie könnte so etwas tun:
InformationsquelleAutor jcollado