Sözlükteki bir anahtarın adını değiştirme


Yanıtlar:


715

2 adımda kolayca yapılır:

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

Veya 1 adımda:

dictionary[new_key] = dictionary.pop(old_key)

KeyErroreğer dictionary[old_key]tanımsızsa artacaktır . Bu Not olacaktır silin 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
Anahtar mevcut değilse, bu bir KeyError'u her iki şekilde de yükseltir, ancak bundan dict[new_value] = dict.pop(old_value, some_default_value)kaçınmak için kullanabilirsiniz
Tobias Kienzler

2
Bunun, anahtarın CPython 3.6+ / Pypy ve Python 3.7+ içindeki konumunu da etkileyeceğini unutmayın. Bu genel olarak pozisyonundan old_keyfarklı olacaktır new_key.
norok2

63

tüm tuşları değiştirmek istiyorsanız:

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}

tek anahtarı değiştirmek istiyorsanız: Yukarıdaki önerilerden herhangi biriyle gidebilirsiniz.


3
Bu, var olanı güncellemek yerine yeni bir sözlük oluşturur - bu önemli olmayabilir, ancak istenen şey değildir.
martineau

15
Sözlük anlama ile aynı cevap:{ 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

Python 2.7 ve daha yeni sürümlerde sözlük anlama özelliğini kullanabilirsiniz: Bu, bir DictReader kullanarak bir CSV okurken karşılaştığım bir örnektir. Kullanıcı tüm sütun adlarını ':' ile sonlandırdı

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

tuşlarındaki sondaki ':' işaretinden kurtulmak için:

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


"AttributeError: 'dict' nesnesinin" replace "özelliği yok
user1318135

2
user1318125, kopyala yapıştırmayı denemenizi öneririm. Bu benim için python konsolunda çalışıyor (.replace, anahtar olarak kullanılan dize üzerinde yürütülüyor)
north.mister

7

Anahtarlar sözlüklerin değerleri aramak için kullandığı şey olduğundan, bunları gerçekten değiştiremezsiniz. Yapabileceğiniz en yakın şey eski anahtarla ilişkili değeri kaydetmek, silmek, daha sonra yedek anahtar ve kaydedilen değerle yeni bir giriş eklemektir. Diğer cevapların birçoğu bunun gerçekleştirilebileceği farklı yolları göstermektedir.


5

Karmaşık bir dikteniz varsa, bu dikte içinde bir diksiyon veya liste olduğu anlamına gelir:

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

Bunu yapmanın doğrudan bir yolu yok, ancak silebilir ve sonra atayabilirsiniz

d = {1:2,3:4}

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

veya toplu anahtar değişiklikleri yapı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

Sözlükteki tüm tuşları dönüştürmek için

Diyelim ki bu sizin sözlüğünüz:

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

Tüm tire işaretlerini örnek sözlük anahtarında alt çizgilere dönüştürmek için:

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

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

anahtarları p = ['a', 'b'] liste öğelerine değiştirmek istediğimizi varsayalım. Aşağıdaki kod:

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

ve alırız

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

0

Aynı değeri birçok anahtarla ilişkilendirebilir veya sadece bir anahtarı kaldırıp aynı değere sahip yeni bir anahtar ekleyebilirsiniz.

Örneğin, anahtarlar-> değerleriniz varsa:

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

ekleyemez purple->2veya kaldıramaz red->1ve ekleyemezsinizorange->1


0

Tüm anahtarların bir kerede değiştirilmesi durumunda. Burada anahtarları kökten atıyorum.

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

Bu tam cevabı görmedim:

dict['key'] = value

Bunu nesne özniteliklerine bile yapabilirsiniz. Bunu yaparak bunları sözlük haline getirin:

dict = vars(obj)

Ardından, nesne özelliklerini sözlükte olduğu gibi değiştirebilirsiniz:

dict['attribute'] = value

1
Bunun soru ile nasıl ilişkili olduğunu görmüyorum; lütfen biraz açar mısın?
apraetor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.