3552 Stimmen

Wie kann ich neue Schlüssel zu einem Wörterbuch hinzufügen?

Wie füge ich einen Schlüssel zu einem bestehenden Wörterbuch hinzu? Es hat keine .add() Methode.

0 Stimmen

Entweder verwenden Sie die akzeptierte Antwort: d['mynewkey'] = 'mynewvalue' oder Sie können val = d.setdefault('mynewkey', 'mynewvalue') verwenden.

2 Stimmen

Wenn Sie einfach <Wörterbuch>[<Schlüssel>] = <Wert> verwenden und der Schlüssel nicht existiert, wird er automatisch hinzugefügt.

2 Stimmen

Re @cs95, dies erzeugt auch ein neues Diktat mit einem zusätzlichen Schlüssel: dict(existing_dict, new_key=new_val) per stackoverflow.com/a/46647897/1840471

69voto

Colonel Panic Punkte 125419

Die herkömmliche Syntax lautet d[key] = value Wenn auf Ihrer Tastatur die Tasten für eckige Klammern fehlen, können Sie das auch tun:

d.__setitem__(key, value)

In der Tat, die Definition __getitem__ y __setitem__ Methoden können Sie Ihre eigene Klasse so gestalten, dass sie die Syntax der eckigen Klammern unterstützt. Siehe _Eintauchen in Python, 5.6. Spezielle Klassenmethoden_ .

28 Stimmen

Ohne die Klammertasten auf meiner Tastatur wäre es für mich extrem schwierig, mit Python zu programmieren.

2 Stimmen

Dies war die einzige Möglichkeit, die ich finden konnte, um Wörterbuchwerte innerhalb eines Listenverstehens zu setzen. Danke

3 Stimmen

@chrisstevens, wenn Sie einen Wert in einer comprehension setzen wollen, habe ich folgenden Hack verwendet [a for a in my_dict if my_dict.update({'a': 1}) is None] .

68voto

Asher Punkte 2458

Wenn Sie ein Wörterbuch innerhalb eines Wörterbuchs hinzufügen möchten, können Sie dies auf diese Weise tun.

Beispiel: Hinzufügen eines neuen Eintrags zu Ihrem Wörterbuch und Unterwörterbuch

dictionary = {}
dictionary["new key"] = "some new entry" # add new dictionary entry
dictionary["dictionary_within_a_dictionary"] = {} # this is required by python
dictionary["dictionary_within_a_dictionary"]["sub_dict"] = {"other" : "dictionary"}
print (dictionary)

Ausgabe:

{'new key': 'some new entry', 'dictionary_within_a_dictionary': {'sub_dict': {'other': 'dictionarly'}}}

HINWEIS: Python verlangt, dass Sie zuerst eine Sub

dictionary["dictionary_within_a_dictionary"] = {}

bevor Sie Einträge hinzufügen.

15 Stimmen

Dies ist für die gestellte Frage genauso irrelevant wie die meisten Kommentare in den php.net-Handbuchseiten...

3 Stimmen

Nichts hindert Sie daran, dies in einer Zeile zu tun: dictionary = {"dictionary_within_a_dictionary": {"sub_dict": {"other" : "dictionary"}}} (oder wenn dictionary ist bereits ein Diktat, dictionary["dictionary_within_a_dictionary"] = {"sub_dict": {"other" : "dictionary"}} )

46voto

kiriloff Punkte 24291

Sie können eine erstellen:

class myDict(dict):

    def __init__(self):
        self = dict()

    def add(self, key, value):
        self[key] = value

## example

myd = myDict()
myd.add('apples',6)
myd.add('bananas',3)
print(myd)

Gibt:

>>> 
{'apples': 6, 'bananas': 3}

39voto

campeterson Punkte 3361

Nehmen wir an, Sie wollen in einer unveränderlichen Welt leben und tun no das Original ändern wollen, aber ein neues erstellen wollen dict die das Ergebnis des Hinzufügens eines neuen Schlüssels zum Original ist.

In Python 3.5+ können Sie das tun:

params = {'a': 1, 'b': 2}
new_params = {**params, **{'c': 3}}

Das Python-2-Äquivalent ist:

params = {'a': 1, 'b': 2}
new_params = dict(params, **{'c': 3})

Nach einem dieser beiden Fälle:

params ist immer noch gleich {'a': 1, 'b': 2}

new_params ist gleich {'a': 1, 'b': 2, 'c': 3}

Es gibt Fälle, in denen Sie das Original nicht verändern wollen (Sie wollen nur das Ergebnis, das dem Original hinzugefügt wurde). Ich finde das eine erfrischende Alternative zu den folgenden:

params = {'a': 1, 'b': 2}
new_params = params.copy()
new_params['c'] = 3

o

params = {'a': 1, 'b': 2}
new_params = params.copy()
new_params.update({'c': 3})

参考 Was bedeutet `**` in dem Ausdruck `dict(d1, **d2)`?

4 Stimmen

In einem längeren Gespräch mit einem Kollegen, der die funktionale Programmierung befürwortet, wurde ein gutes Argument vorgebracht. Ein Nachteil des obigen Ansatzes ist, dass jemand, der den Code liest, nicht mit dem ** in Python (viele sind es nicht), dann wird es nicht offensichtlich sein, was vor sich geht. Es gibt Zeiten, in denen Sie einen weniger funktionalen Ansatz für eine bessere Lesbarkeit bevorzugen werden.

7 Stimmen

Wir können nicht vorhersehen, welche Teilmenge der Python-Sprache unsere Leser kennen, also ist es nur fair anzunehmen, dass sie die gesamte Sprache kennen, so dass sie in den Dokumentationen nach den Teilen suchen, die sie nicht kennen.

38voto

Brent Bradburn Punkte 45995

Diese beliebte Frage Adressen funktionell Methoden zur Zusammenführung von Wörterbüchern a y b .

Hier sind einige der einfacheren Methoden (getestet in Python 3)...

c = dict( a, **b ) ## see also https://stackoverflow.com/q/2255878
c = dict( list(a.items()) + list(b.items()) )
c = dict( i for d in [a,b] for i in d.items() )

Hinweis: Die erste Methode oben funktioniert nur, wenn die Schlüssel in b sind Zeichenfolgen.

So fügen Sie ein einzelnes Element hinzu oder ändern es die b Wörterbuch nur dieses eine Element enthalten würde...

c = dict( a, **{'d':'dog'} ) ## returns a dictionary based on 'a'

Dies ist gleichbedeutend mit...

def functional_dict_add( dictionary, key, value ):
   temp = dictionary.copy()
   temp[key] = value
   return temp

c = functional_dict_add( a, 'd', 'dog' )

8 Stimmen

Interessante Bemerkung zur ersten Methode von Pythons BDFL ( aquí ).

1 Stimmen

c = dict( a, **{'d':'dog'} ) würde besser geschrieben werden als c = dict(a, d='dog') solange die Schlüssel bekannt sind und nicht berechnet werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X