Pertanyaan Tambahkan kunci baru ke kamus?


Apakah mungkin untuk menambahkan kunci ke kamus Python setelah dibuat? Sepertinya tidak memiliki .add() metode.


1904
2018-06-21 22:07


asal


Jawaban:


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

2510
2018-06-21 22:09



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

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

850
2017-07-22 14:48



Saya merasa seperti mengonsolidasikan info tentang kamus Python:

Membuat kamus kosong

data = {}
# OR
data = dict()

Membuat kamus dengan nilai awal

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

Menyisipkan / Memperbarui satu nilai

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)

Memasukkan / Memperbarui beberapa nilai

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

Membuat kamus gabungan tanpa memodifikasi dokumen asli

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

Menghapus item dalam kamus

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

Periksa apakah kunci sudah ada dalam kamus

key in data

Iterasi melalui pasangan dalam kamus

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

Buat kamus dari 2 daftar

data = dict(zip(list_with_keys, list_with_values))

Jangan ragu untuk menambahkan lebih banyak!


583
2017-12-05 06:07



Ya, itu sangat mudah. Cukup lakukan hal berikut:

dict["key"] = "value"

132
2018-06-21 22:09



"Apakah mungkin untuk menambahkan kunci ke kamus Python setelah dibuat? Sepertinya tidak memiliki metode .add ()."

Ya itu mungkin, dan itu memang memiliki metode yang mengimplementasikan ini, tetapi Anda tidak ingin menggunakannya secara langsung.

Untuk mendemonstrasikan bagaimana dan bagaimana tidak menggunakannya, mari kita membuat dikte kosong dengan literal dict, {}:

my_dict = {}

Praktik Terbaik 1: Notasi subscrip

Untuk memperbarui catatan ini dengan satu kunci dan nilai baru, Anda dapat menggunakan notasi subskrip (lihat Pemetaan di sini) yang menyediakan penugasan item:

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

my_dict sekarang:

{'new key': 'new value'}

Praktik Terbaik 2: The update metode - 2 cara

Kami juga dapat memperbarui dict dengan beberapa nilai efisien juga menggunakan itu update metode. Kami mungkin tidak perlu membuat tambahan dict di sini, jadi kami harap kami dict telah dibuat dan berasal dari atau digunakan untuk tujuan lain:

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

my_dict sekarang:

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

Cara lain yang efisien untuk melakukan ini dengan metode pembaruan adalah dengan argumen kata kunci, tetapi karena kata-kata itu harus sah, Anda tidak dapat memiliki spasi atau simbol khusus atau memulai nama dengan angka, tetapi banyak yang menganggap ini sebagai cara yang lebih mudah dibaca. untuk membuat kunci untuk dikte, dan di sini kita tentu menghindari membuat tambahan yang tidak perlu dict:

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

dan my_dict sekarang:

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

Jadi sekarang kami telah membahas tiga cara Python untuk memperbarui dict.


Metode sihir, __setitem__, dan mengapa itu harus dihindari

Ada cara lain untuk memperbarui dict yang tidak seharusnya Anda gunakan, yang menggunakan __setitem__ metode. Berikut ini contoh bagaimana orang bisa menggunakan __setitem__ metode untuk menambahkan pasangan kunci-nilai ke dict, dan demonstrasi kinerja buruk menggunakannya:

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

Jadi kita melihat bahwa menggunakan notasi subscript sebenarnya jauh lebih cepat daripada menggunakan __setitem__. Melakukan hal Pythonic, yaitu, menggunakan bahasa dalam cara yang dimaksudkan untuk digunakan, biasanya lebih mudah dibaca dan efisien secara komputasi.


105
2017-11-29 23:57



dictionary[key] = value

73
2018-06-21 22:08



Jika Anda ingin menambahkan kamus dalam kamus, Anda dapat melakukannya dengan cara ini.

Contoh: Tambahkan entri baru ke kamus & sub kamus Anda

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)

Keluaran:

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

CATATAN: Python mengharuskan Anda menambahkan sub terlebih dahulu

dictionary["dictionary_within_a_dictionary"] = {}

sebelum menambahkan entri.


44
2018-04-26 19:04



Sintaks ortodoks adalah d[key] = value, tetapi jika keyboard Anda tidak memiliki kunci braket persegi yang dapat Anda lakukan:

d.__setitem__(key, value)

Faktanya, mendefinisikan __getitem__ dan __setitem__ metode adalah bagaimana Anda dapat membuat kelas Anda sendiri mendukung sintaks braket persegi. Lihat http://www.diveintopython.net/object_oriented_framework/special_class_methods.html


31
2018-04-14 00:58



Anda dapat membuatnya

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)

memberi

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

25
2018-05-25 13:33



Pertanyaan populer ini alamat fungsional metode penggabungan kamus a dan b.

Berikut adalah beberapa metode yang lebih mudah (diuji dengan 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() )

Catatan: Metode pertama di atas hanya berfungsi jika kunci masuk b adalah string.

Untuk menambah atau memodifikasi satu elemen, yang b kamus hanya berisi satu elemen ...

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

Ini setara dengan ...

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



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

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

hasil dalam

a-A
b-B

15
2017-12-05 06:26