Pytanie Dodać nowe klucze do słownika?


Czy istnieje możliwość dodania klucza do słownika Python po jego utworzeniu? Wygląda na to, że nie ma .add() metoda.


1908
2018-06-21 22:07


pochodzenie




Odpowiedzi:


>>> d = {'key':'value'}
>>> print(d)
{'key': 'value'}
>>> d['mynewkey'] = 'mynewvalue'
>>> print(d)
{'mynewkey': 'mynewvalue', 'key': 'value'}

2526
2018-06-21 22:09



@DeepaMG Kod jest bardzo prosty. Używa udokumentowanego sposobu zadeklarowania pary klucz / wartość słownika. - Bruno9779
Wyjaśnienie: tworzysz nową parę klucz \ wartość w słowniku, przypisując jej wartość. Jeśli klucz nie istnieje, zostanie dodany i wskaże tę wartość. Jeśli istnieje, aktualna wartość, na którą wskazuje, jest nadpisywana. - R. Navega


>>> x = {1:2}
>>> print x
{1: 2}

>>> x.update({3:4})
>>> print x
{1: 2, 3: 4}

850
2017-07-22 14:48



to jest bardzo nieefektywne, aby stworzyć słownik po prostu aktualizować jeden klucz. Zrób to tylko, jeśli masz więcej niż 1 klucz (może istnieć próg, powyżej którego lepiej jest stworzyć dict) - Jean-François Fabre


Mam ochotę skonsolidować informacje o słownikach Python:

Tworzenie pustego słownika

data = {}
# OR
data = dict()

Tworzenie słownika z wartościami początkowymi

data = {'a':1,'b':2,'c':3}
# OR
data = dict(a=1, b=2, c=3)
# OR
data = {k: v for k, v in (('a', 1),('b',2),('c',3))}

Wstawianie / aktualizowanie pojedynczej wartości

data['a']=1  # Updates if 'a' exists, else adds 'a'
# OR
data.update({'a':1})
# OR
data.update(dict(a=1))
# OR
data.update(a=1)

Wstawianie / aktualizowanie wielu wartości

data.update({'c':3,'d':4})  # Updates 'c' and adds 'd'

Tworzenie scalonego słownika bez modyfikowania oryginałów

data3 = {}
data3.update(data)  # Modifies data3, not data
data3.update(data2)  # Modifies data3, not data2

Usuwanie elementów ze słownika

del data[key]  # Removes specific element in a dictionary
data.pop(key)  # Removes the key & returns the value
data.clear()  # Clears entire dictionary

Sprawdź, czy klucz jest już w słowniku

key in data

Iteruj przez pary w słowniku

for key in data: # Iterates just through the keys, ignoring the values
for key, value in d.items(): # Iterates through the pairs
for key in d.keys(): # Iterates just through key, ignoring the values
for value in d.values(): # Iterates just through value, ignoring the keys

Utwórz słownik z 2 list

data = dict(zip(list_with_keys, list_with_values))

Zachęcamy do dodania więcej!


590
2017-12-05 06:07





Tak, to całkiem proste. Po prostu wykonaj następujące czynności:

dict["key"] = "value"

133
2018-06-21 22:09





"Czy istnieje możliwość dodania klucza do słownika Pythona po jego utworzeniu? Nie wydaje się, aby metoda .add () była."

Tak, jest to możliwe i ma metodę, która to implementuje, ale nie chcesz używać go bezpośrednio.

Aby zademonstrować, jak i jak tego nie użyć, stwórzmy pusty dyktat z literałem dosłownym, {}:

my_dict = {}

Najlepsza praktyka 1: Zapis dolny

Aby zaktualizować ten dyktat za pomocą jednego nowego klucza i wartości, możesz użyć notacja dolna (patrz Mappings tutaj) który zapewnia przypisanie przedmiotu:

my_dict['new key'] = 'new value'

my_dict jest teraz:

{'new key': 'new value'}

Najlepsza praktyka 2: The update metoda - 2 sposoby

Możemy również zaktualizować dyktowanie o wiele wartości efektywnie i przy użyciu update metoda. Możemy niepotrzebnie tworzyć dodatkowe dict tutaj, więc mamy nadzieję, że nasze dict został już utworzony i pochodzi lub był używany do innego celu:

my_dict.update({'key 2': 'value 2', 'key 3': 'value 3'})

my_dict jest teraz:

{'key 2': 'value 2', 'key 3': 'value 3', 'new key': 'new value'}

Innym skutecznym sposobem na to przy użyciu metody aktualizacji są argumenty ze słowami kluczowymi, ale ponieważ muszą być prawdziwymi słowami pythonowymi, nie można mieć spacji ani specjalnych symboli lub nazwy z numerem, ale wiele osób uważa to za bardziej czytelny sposób tworzyć klucze do dyktowania, a tutaj na pewno unikniemy tworzenia dodatkowych niepotrzebnych dict:

my_dict.update(foo='bar', foo2='baz')

i my_dict jest teraz:

{'key 2': 'value 2', 'key 3': 'value 3', 'new key': 'new value', 
 'foo': 'bar', 'foo2': 'baz'}

Tak więc omówiliśmy trzy Pythoniczne sposoby aktualizacji a dict.


Magiczna metoda, __setitem__i dlaczego należy tego unikać

Jest inny sposób na aktualizację dict że nie powinieneś używać, który używa __setitem__ metoda. Oto przykład tego, jak można z nich korzystać __setitem__ metoda dodawania pary klucz-wartość do a dictoraz demonstracja słabej wydajności korzystania z niego:

>>> d = {}
>>> d.__setitem__('foo', 'bar')
>>> d
{'foo': 'bar'}


>>> def f():
...     d = {}
...     for i in xrange(100):
...         d['foo'] = i
... 
>>> def g():
...     d = {}
...     for i in xrange(100):
...         d.__setitem__('foo', i)
... 
>>> import timeit
>>> number = 100
>>> min(timeit.repeat(f, number=number))
0.0020880699157714844
>>> min(timeit.repeat(g, number=number))
0.005071878433227539

Widzimy więc, że używanie notacji dolnego indeksu jest znacznie szybsze niż użycie __setitem__. Robienie rzeczy w języku Pythonic, czyli używanie języka w sposób, w jaki zamierzano go używać, jest zwykle bardziej czytelne i wydajne obliczeniowo.


105
2017-11-29 23:57





dictionary[key] = value

73
2018-06-21 22:08



Vanuan: szybkość nie jest jedynym warunkiem dobrej odpowiedzi. Ważny jest również odpowiedni poziom szczegółowości. - naught101


Jeśli chcesz dodać słownik w słowniku, możesz to zrobić w ten sposób.

Przykład: dodaj nowy wpis do słownika i podnośnika

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)

Wydajność:

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

UWAGA: Python wymaga, aby najpierw dodać sub

dictionary["dictionary_within_a_dictionary"] = {}

przed dodaniem wpisów.


44
2018-04-26 19:04



jest to równie nieistotne dla pytania zadawanego jak większość komentarzy na stronach podręcznika php.net ... - Erik Allik
Nic nie powstrzyma cię od zrobienia tego w jednym wierszu: dictionary = {"dictionary_within_a_dictionary": {"sub_dict": {"other" : "dictionary"}}} (albo jeśli dictionary jest już dyktando, dictionary["dictionary_within_a_dictionary"] = {"sub_dict": {"other" : "dictionary"}}) - Chris


Ortodoksyjna składnia jest d[key] = value, ale jeśli na klawiaturze brakuje klawiszy z nawiasami kwadratowymi, możesz:

d.__setitem__(key, value)

W rzeczywistości, definiując __getitem__ i __setitem__ metody to sposób, w jaki można uczynić własną klasę obsługą składni nawiasów kwadratowych. Widzieć http://www.diveintopython.net/object_oriented_framework/special_class_methods.html


31
2018-04-14 00:58



Byłoby mi niezmiernie trudno programować w Pythonie bez klawiszy wspornika na mojej klawiaturze. - Bobort
Lub większość języków programowania, gdy mamy do czynienia z tablicami ... - Shadow
Był to jedyny sposób, w jaki mogłem znaleźć wartości słownikowe w zrozumieniu listy. Dzięki - chris stevens


możesz go stworzyć

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)

daje

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

25
2018-05-25 13:33





To popularne pytanie adresy funkcjonalny metody łączenia słowników a i b.

Oto niektóre z bardziej prostych metod (testowane w Pythonie 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() )

Uwaga: Pierwsza metoda powyżej działa tylko wtedy, gdy klucze są w b są łańcuchami.

Aby dodać lub zmodyfikować pojedynczy element, b słownik zawierałby tylko ten jeden element ...

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

Jest to odpowiednik ...

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

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

25
2017-08-17 23:04



Ciekawy komentarz na temat pierwszej metody z BDFL w Pythonie (tutaj). - nobar