Thay đổi tên của một khóa trong từ điển


Câu trả lời:


715

Dễ dàng thực hiện trong 2 bước:

dictionary[new_key] = dictionary[old_key]
del dictionary[old_key]

Hoặc trong 1 bước:

dictionary[new_key] = dictionary.pop(old_key)

Nó sẽ tăng KeyErrornếu dictionary[old_key]không được xác định. Lưu ý rằng điều này sẽ xóa dictionary[old_key].

>>> dictionary = { 1: 'one', 2:'two', 3:'three' }
>>> dictionary['ONE'] = dictionary.pop(1)
>>> dictionary
{2: 'two', 3: 'three', 'ONE': 'one'}
>>> dictionary['ONE'] = dictionary.pop(1)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 1

59
Điều này sẽ tăng KeyError theo cách này nếu khóa không tồn tại, nhưng bạn có thể sử dụng dict[new_value] = dict.pop(old_value, some_default_value)để tránh điều đó
Tobias Kienzler

2
Lưu ý rằng điều này cũng sẽ ảnh hưởng đến vị trí của khóa trong CPython 3.6+ / Pypy và Python 3.7+. Đó là nói chung vị trí của old_keysẽ khác với vị trí của new_key.
norok2

63

nếu bạn muốn thay đổi tất cả các phím:

d = {'x':1, 'y':2, 'z':3}
d1 = {'x':'a', 'y':'b', 'z':'c'}

In [10]: dict((d1[key], value) for (key, value) in d.items())
Out[10]: {'a': 1, 'b': 2, 'c': 3}

nếu bạn muốn thay đổi khóa đơn: Bạn có thể đi với bất kỳ đề xuất nào ở trên.


3
Điều này tạo ra một từ điển mới thay vì cập nhật một từ điển hiện có - có thể không quan trọng, nhưng không phải là những gì được yêu cầu.
martineau

15
Câu trả lời tương tự với cách hiểu từ điển:{ d1[key] : value for key, value in d.items() }
Morwenn

35

pop'n'fresh

>>>a = {1:2, 3:4}
>>>a[5] = a.pop(1)
>>>a
{3: 4, 5: 2}
>>> 

26

Trong python 2.7 trở lên, bạn có thể sử dụng khả năng hiểu từ điển: Đây là một ví dụ tôi gặp trong khi đọc CSV bằng DictReader. Người dùng đã nhập vào tất cả các tên cột bằng ':'

ori_dict = {'key1:' : 1, 'key2:' : 2, 'key3:' : 3}

để thoát khỏi dấu vết ':' trong các phím:

corrected_dict = { k.replace(':', ''): v for k, v in ori_dict.items() }


"AttributionError: đối tượng 'dict' không có thuộc tính 'thay thế'"
user1318135

2
user1318125, tôi sẽ đề nghị thử sao chép dán. Điều này hoạt động với tôi trong bảng điều khiển python (.replace đang được thực thi trên chuỗi được sử dụng làm khóa)
south.mister

7

Vì các khóa là những gì mà từ điển sử dụng để tra cứu các giá trị, bạn thực sự không thể thay đổi chúng. Điều gần nhất bạn có thể làm là lưu giá trị được liên kết với khóa cũ, xóa nó, sau đó thêm một mục mới với khóa thay thế và giá trị đã lưu. Một số câu trả lời khác minh họa những cách khác nhau có thể được thực hiện.


5

Nếu bạn có một lệnh phức tạp, điều đó có nghĩa là có một lệnh hoặc danh sách trong lệnh:

myDict = {1:"one",2:{3:"three",4:"four"}}
myDict[2][5] = myDict[2].pop(4)
print myDict

Output
{1: 'one', 2: {3: 'three', 5: 'four'}}

4

Không có cách trực tiếp để làm điều này, nhưng bạn có thể xóa-rồi-gán

d = {1:2,3:4}

d[newKey] = d[1]
del d[1]

hoặc thay đổi khóa lớn:

d = dict((changeKey(k), v) for k, v in d.items())

2
d = { changeKey(k): v for k, v in d.items()}
Erich

4

Để chuyển đổi tất cả các khóa trong từ điển

Giả sử đây là từ điển của bạn:

>>> sample = {'person-id': '3', 'person-name': 'Bob'}

Để chuyển đổi tất cả các dấu gạch ngang thành dấu gạch dưới trong khóa từ điển mẫu:

>>> sample = {key.replace('-', '_'): sample.pop(key) for key in sample.keys()}
>>> sample
>>> {'person_id': '3', 'person_name': 'Bob'}

3
d = {1:2,3:4}

giả sử rằng chúng tôi muốn thay đổi các khóa thành các thành phần danh sách p = ['a', 'b']. đoạn mã sau sẽ làm:

d=dict(zip(p,list(d.values()))) 

và chúng tôi nhận được

{'a': 2, 'b': 4}

0

Bạn có thể liên kết cùng một giá trị với nhiều khóa hoặc chỉ cần xóa một khóa và thêm lại một khóa mới có cùng giá trị.

Ví dụ: nếu bạn có khóa-> giá trị:

red->1
blue->2
green->4

không có lý do gì bạn không thể thêm purple->2hoặc xóa red->1và thêmorange->1


0

Trong trường hợp thay đổi tất cả các phím cùng một lúc. Ở đây tôi đang bắt nguồn từ các phím.

a = {'making' : 1, 'jumping' : 2, 'climbing' : 1, 'running' : 2}
b = {ps.stem(w) : a[w] for w in a.keys()}
print(b)
>>> {'climb': 1, 'jump': 2, 'make': 1, 'run': 2} #output

-3

Tôi chưa thấy câu trả lời chính xác này:

dict['key'] = value

Bạn thậm chí có thể làm điều này với các thuộc tính đối tượng. Biến chúng thành một cuốn từ điển bằng cách làm điều này:

dict = vars(obj)

Sau đó, bạn có thể thao tác các thuộc tính đối tượng như từ điển:

dict['attribute'] = value

1
Tôi không thấy làm thế nào điều này có liên quan đến câu hỏi; bạn có thể vui lòng giải thích?
apraetor
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.