Soru Bir sözlüğe yeni anahtarlar eklemek ister misiniz?


Oluşturulduktan sonra bir Python sözlüğüne anahtar eklemek mümkün mü? Bir var gibi görünmüyor .add() yöntem.


1908
2018-06-21 22:07


Menşei




Cevaplar:


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

2526
2018-06-21 22:09



@DeepaMG Kod çok basit. Bir sözlük anahtar / değer çifti bildirmek için belgelenmiş bir şekilde kullanır. - Bruno9779
Açıklama: Söz konusu tuşa bir değer atayarak bir sözlükte yeni bir anahtar \ değer çifti oluşturursunuz. Anahtar yoksa, eklenir ve bu değere işaret eder. Varsa, işaret ettiği geçerli değerin üzerine yazılır. - 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



Bu, sadece bir anahtarı güncellemek için bir sözlük oluşturmaya yetecek kadar etkisizdir. Bunu sadece 1 anahtardan daha fazlasına sahipseniz yapın (yukarıda bir dict oluşturmak için daha iyi bir eşik olabilir) - Jean-François Fabre


Python sözlükleri hakkında bilgi birleştirmek istiyorum:

Boş bir sözlük oluşturuluyor

data = {}
# OR
data = dict()

Başlangıç ​​değerleriyle sözlük oluşturma

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))}

Tek bir değer eklemek / güncellemek

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)

Birden çok değer ekleme / güncelleme

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

Orijinalleri değiştirmeden birleştirilmiş sözlük oluşturma

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

Sözlükdeki öğeleri silme

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

Bir anahtarın sözlükte olup olmadığını kontrol edin

key in data

Bir sözlükte çiftler halinde yineleyin

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

2 listeden bir sözlük oluştur

data = dict(zip(list_with_keys, list_with_values))

Daha fazla eklemek için çekinmeyin!


590
2017-12-05 06:07





Evet, oldukça kolay. Sadece aşağıdakileri yapın:

dict["key"] = "value"

133
2018-06-21 22:09





"Oluşturulduktan sonra bir Python sözlüğüne bir anahtar eklemek mümkün mü? Bir .add () yöntemine sahip görünmüyor."

Evet, mümkün ve bunu uygulayan bir yöntemi var, ancak doğrudan kullanmak istemiyorsunuz.

Nasıl ve nasıl kullanılmayacağını göstermek için, dict literal ile boş bir dict oluşturalım, {}:

my_dict = {}

En İyi Uygulama 1: Abonelik notasyonu

Bu kuralı tek bir yeni anahtar ve değerle güncellemek için alt simge gösterimi (burada bkz. Mappings) öğe atamasını sağlayan:

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

my_dict şimdi:

{'new key': 'new value'}

En İyi Uygulama 2: update yöntem - 2 yol

Aynı zamanda dict'i de kullanarak birden çok değeri verimli bir şekilde güncelleyebiliriz. update yöntem. Gereksiz yere fazladan bir şeyler yaratabiliriz dict burada, umarız dict zaten oluşturuldu ve başka bir amaçla kullanıldı veya kullanıldı:

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

my_dict şimdi:

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

Bunu güncelleme yöntemiyle yapmanın bir başka etkili yolu da anahtar kelime argümanlarıdır, ancak meşru bir python kelimesi olması gerektiğinden, boşluk veya özel semboller kullanamazsınız veya ismi bir sayıyla başlatamazsınız, fakat çoğu bunu daha okunaklı bir şekilde düşünür. Bir dict için anahtarlar oluşturmak için, ve burada kesinlikle ekstra bir ekstra yaratmamaktan kaçınmak dict:

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

ve my_dict şimdi:

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

Şimdi üç Pythonic güncelleme yolunu ele aldık dict.


Sihirli yöntem __setitem__ve neden kaçınılmalı?

Güncellemenin başka bir yolu var dict kullanmamanız gereken __setitem__ yöntem. Kullanıcının nasıl kullanılabileceğine dair bir örnek __setitem__ bir anahtar / değer çifti eklemek dictve onu kullanmanın zayıf performansının bir gösterimi:

>>> 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

Bu yüzden, abst gösterimini kullanmanın aslında kullanmaktan çok daha hızlı olduğunu görüyoruz. __setitem__. Pythonic şeyi yapmak, yani dili kullanılması amaçlanan şekilde kullanmak, genellikle hem daha okunaklı hem de sayısal olarak verimlidir.


105
2017-11-29 23:57





dictionary[key] = value

73
2018-06-21 22:08



Vanuan: hız, iyi bir cevap için tek gereklilik değildir. Uygun bir detay seviyesi de hayati önem taşımaktadır. - naught101


Bir sözlük içerisinde sözlük eklemek istiyorsanız bunu bu şekilde yapabilirsiniz.

Örnek: Sözlük ve alt sözlüğünüze yeni bir giriş ekleyin

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)

Çıktı:

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

NOT: Python, önce bir alt eklemenizi gerektirir

dictionary["dictionary_within_a_dictionary"] = {}

girişleri eklemeden önce.


44
2018-04-26 19:04



Bu, php.net manuel sayfalarındaki yorumların çoğu olarak sorulan soruyla alakasız ... - Erik Allik
Bunu bir satırda yapmanı engelleyecek bir şey yok: dictionary = {"dictionary_within_a_dictionary": {"sub_dict": {"other" : "dictionary"}}} (ya da eğer dictionary zaten bir taslaktır, dictionary["dictionary_within_a_dictionary"] = {"sub_dict": {"other" : "dictionary"}}) - Chris


Ortodoks sentaks d[key] = valueAncak, klavyenizde köşeli ayraç anahtarları yoksa, şunları yapabilirsiniz:

d.__setitem__(key, value)

Aslında, tanımlama __getitem__ ve __setitem__ yöntemleri, kendi sınıfınızı köşeli parantez sözdizimini nasıl destekleyebileceğinizdir. Görmek http://www.diveintopython.net/object_oriented_framework/special_class_methods.html


31
2018-04-14 00:58



Klavyedeki braket tuşları olmadan python ile programlamayı çok zor buluyordum. - Bobort
Ya da dizilerle uğraşırken çoğu programlama dili ... - Shadow
Bu, sözlük değerlerini liste kavramasında ayarlamak için bulabildiğim tek yoldu. Teşekkürler - chris stevens


bir tane oluşturabilirsiniz

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)

verir

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

25
2018-05-25 13:33





Bu popüler soru adresler fonksiyonel sözlükleri birleştirme yöntemleri a ve b.

İşte bazı daha basit yöntemler (Python 3'te test edilmiştir) ...

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() )

Not: Yukarıdaki ilk yöntem yalnızca tuşların b dizelerdir.

Tek bir eleman eklemek veya değiştirmek için, b sözlük sadece bir öğe içerecektir ...

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

Bu eşdeğerdir ...

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



Python'un BDFL'sinden ilk yöntem hakkında ilginç yorum (İşte). - nobar


data = {}
data['a'] = 'A'
data['b'] = 'B'

for key, value in data.iteritems():
    print "%s-%s" % (key, value)

sonuç

a-A
b-B

15
2017-12-05 06:26



stackoverflow kodu ile ilgili değil, problemlere çözümlerle ilgili. Önerilen çözümünüz (dizin kullanımlarını kullanın) halihazırda verilmiş olanla tamamen aynıdır. - Vanuan