Câu hỏi Thêm khóa mới vào từ điển?


Có thể thêm một khóa vào một từ điển Python sau khi nó đã được tạo ra không? Nó dường như không có .add() phương pháp.


1908
2018-06-21 22:07


gốc




Các câu trả lời:


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

2526
2018-06-21 22:09



@DeepaMG Mã rất cơ bản. Nó sử dụng cách được tài liệu để khai báo cặp khóa / giá trị từ điển. - Bruno9779
Giải thích là: bạn tạo cặp khóa \ giá trị mới trên từ điển bằng cách gán giá trị cho khóa đó. Nếu khóa không tồn tại, nó sẽ được thêm vào và trỏ đến giá trị đó. Nếu nó tồn tại, giá trị hiện tại nó trỏ đến sẽ bị ghi đè. - 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



điều này là không hiệu quả để tạo một từ điển chỉ để cập nhật một khóa. Chỉ thực hiện việc này nếu bạn có nhiều hơn 1 khóa (có thể có một ngưỡng ở trên mà tốt hơn là tạo một dict) - Jean-François Fabre


Tôi cảm thấy như củng cố thông tin về từ điển Python:

Tạo một từ điển trống

data = {}
# OR
data = dict()

Tạo một từ điển với các giá trị ban đầu

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

Chèn / Cập nhật một giá trị

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)

Chèn / Cập nhật nhiều giá trị

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

Tạo từ điển đã hợp nhất mà không sửa đổi bản gốc

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

Xóa các mục trong từ điển

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

Kiểm tra xem một khóa đã có trong từ điển chưa

key in data

Lặp lại qua các cặp trong từ điển

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

Tạo một từ điển từ 2 danh sách

data = dict(zip(list_with_keys, list_with_values))

Cư thoải mai thêm vao nưa!


590
2017-12-05 06:07





Vâng, nó khá dễ dàng. Chỉ cần làm như sau:

dict["key"] = "value"

133
2018-06-21 22:09





"Có thể thêm một khóa vào một từ điển Python sau khi nó đã được tạo ra không? Nó dường như không có một phương thức .add ()."

Có, nó có thể, và nó có một phương pháp thực hiện điều này, nhưng bạn không muốn sử dụng nó trực tiếp.

Để chứng minh làm thế nào và làm thế nào không sử dụng nó, chúng ta hãy tạo ra một dict trống với chữ dict, {}:

my_dict = {}

Thực hành tốt nhất 1: Ký hiệu chỉ số

Để cập nhật dict này với một khóa và giá trị mới, bạn có thể sử dụng ký hiệu chỉ số (xem Bản đồ tại đây) cung cấp cho việc gán mục:

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

my_dict Hiện tại là:

{'new key': 'new value'}

Thực hành tốt nhất 2: The update phương pháp - 2 cách

Chúng tôi cũng có thể cập nhật dict với nhiều giá trị hiệu quả cũng như sử dụng các update phương pháp. Chúng tôi có thể không cần thiết tạo thêm dict ở đây, vì vậy chúng tôi hy vọng dict đã được tạo ra và xuất phát từ hoặc đã được sử dụng cho một mục đích khác:

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

my_dict Hiện tại là:

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

Một cách hiệu quả khác để làm điều này với phương thức cập nhật là với các đối số từ khóa, nhưng vì chúng phải là từ trơ hợp pháp, bạn không thể có dấu cách hoặc ký hiệu đặc biệt hoặc bắt đầu tên bằng một số, nhưng nhiều người coi đây là cách dễ đọc hơn để tạo ra chìa khóa cho một dict, và ở đây chúng tôi chắc chắn tránh tạo thêm một không cần thiết dict:

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

my_dict Hiện tại là:

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

Vì vậy, bây giờ chúng tôi đã đề cập đến ba cách cập nhật của Pythonic dict.


Phương pháp ma thuật, __setitem__và tại sao cần tránh

Có một cách khác để cập nhật dict mà bạn không nên sử dụng, sử dụng __setitem__ phương pháp. Dưới đây là ví dụ về cách người ta có thể sử dụng __setitem__ phương pháp để thêm cặp khóa-giá trị vào dictvà trình diễn hiệu suất kém của việc sử dụng nó:

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

Vì vậy, chúng tôi thấy rằng việc sử dụng ký hiệu chỉ số thực sự nhanh hơn nhiều so với việc sử dụng __setitem__. Làm điều Pythonic, đó là, sử dụng ngôn ngữ theo cách nó được dự định sẽ được sử dụng, thường là cả hai dễ đọc hơn và hiệu quả tính toán.


105
2017-11-29 23:57





dictionary[key] = value

73
2018-06-21 22:08



Vanuan: tốc độ không phải là yêu cầu duy nhất cho một câu trả lời tốt. Một mức độ chi tiết thích hợp cũng rất quan trọng. - naught101


Nếu bạn muốn thêm một từ điển trong từ điển bạn có thể làm theo cách này.

Ví dụ: Thêm mục nhập mới vào từ điển và từ điển phụ của bạn

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)

Đầu ra:

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

CHÚ THÍCH: Python yêu cầu bạn thêm một phụ

dictionary["dictionary_within_a_dictionary"] = {}

trước khi thêm mục nhập.


44
2018-04-26 19:04



điều này là không liên quan đến câu hỏi được hỏi như hầu hết các ý kiến ​​trong các trang hướng dẫn sử dụng php.net ... - Erik Allik
Không có gì để ngăn bạn làm điều này trên một dòng: dictionary = {"dictionary_within_a_dictionary": {"sub_dict": {"other" : "dictionary"}}} (hoặc nếu dictionary đã là một dict, dictionary["dictionary_within_a_dictionary"] = {"sub_dict": {"other" : "dictionary"}}) - Chris


Cú pháp chính thống là d[key] = value, nhưng nếu bàn phím của bạn thiếu các phím khung hình vuông, bạn có thể làm:

d.__setitem__(key, value)

Trong thực tế, xác định __getitem__ và __setitem__ các phương thức là cách bạn có thể làm cho lớp của riêng bạn hỗ trợ cú pháp khung vuông. Xem http://www.diveintopython.net/object_oriented_framework/special_class_methods.html


31
2018-04-14 00:58



Tôi sẽ tìm thấy nó cực kỳ khó khăn để lập trình với python mà không có các phím khung trên bàn phím của tôi. - Bobort
Hoặc hầu hết các ngôn ngữ lập trình khi xử lý các mảng ... - Shadow
Đây là cách duy nhất tôi có thể tìm thấy để thiết lập các giá trị từ điển trong một danh sách hiểu. Cảm ơn - chris stevens