शब्दकोश में एक कुंजी का नाम बदलें


जवाबों:


715

आसानी से 2 चरणों में किया जाता है:

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

या 1 चरण में:

dictionary[new_key] = dictionary.pop(old_key)

जो अपरिभाषित है KeyErrorतो उठाएंगे dictionary[old_key]। ध्यान दें कि यह हटा देगा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
यह कुंजी को विद्यमान नहीं होने पर KeyError को किसी भी तरह से बढ़ा देगा, लेकिन आप इससे dict[new_value] = dict.pop(old_value, some_default_value)बचने के लिए उपयोग कर सकते हैं
Tobias Kienzler

2
ध्यान दें कि यह CPython 3.6 + / Pypy और Python 3.7+ में कुंजी की स्थिति को भी प्रभावित करेगा। यह सामान्य रूप old_keyसे की स्थिति की स्थिति से भिन्न होगी new_key
नोरोक 2

63

यदि आप सभी कुंजियाँ बदलना चाहते हैं:

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}

यदि आप एकल कुंजी बदलना चाहते हैं: आप उपरोक्त किसी भी सुझाव के साथ जा सकते हैं।


3
यह एक मौजूदा को अपडेट करने के बजाय एक नया शब्दकोश बनाता है - जो महत्वपूर्ण नहीं हो सकता है, लेकिन ऐसा नहीं है जो पूछा गया था।
मार्टीन्यू

15
एक शब्दकोश समझ के साथ एक ही जवाब:{ d1[key] : value for key, value in d.items() }
मोर्वेन


26

अजगर 2.7 और उच्चतर में, आप शब्दकोश समझ का उपयोग कर सकते हैं: यह एक उदाहरण है जो मैंने एक डिक्ट्रीडर का उपयोग करते हुए सीएसवी को पढ़ने के दौरान किया था। उपयोगकर्ता ने ':' के साथ सभी कॉलम नामों को प्रत्यय दिया था

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

कुंजियों में ':' से छुटकारा पाने के लिए:

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


"एट्रीब्यूट: 'तानाशाह' वस्तु में कोई विशेषता नहीं है 'बदलें'
user1318135

2
user1318125, मैं कॉपी पेस्ट की कोशिश करना चाहूँगा। यह मेरे लिए पाइथन कंसोल में काम करता है (.replace को उस स्ट्रिंग पर निष्पादित किया जा रहा है जिसका उपयोग कुंजी के रूप में किया जाता है)
North.mister

7

चूंकि कुंजियाँ लुकअप मानों के लिए शब्दकोशों का उपयोग करती हैं, आप वास्तव में उन्हें बदल नहीं सकते हैं। निकटतम चीज जो आप कर सकते हैं वह है कि पुरानी कुंजी से जुड़े मूल्य को सहेजना, उसे हटाना, फिर प्रतिस्थापन कुंजी और सहेजे गए मूल्य के साथ एक नई प्रविष्टि जोड़ें। अन्य जवाबों में से कई अलग-अलग तरीकों से यह पूरा करते हैं।


5

यदि आपके पास एक जटिल तानाशाही है, तो इसका मतलब है कि तानाशाह के भीतर एक तानाशाही या सूची है:

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

ऐसा करने का कोई सीधा तरीका नहीं है, लेकिन आप तब हटा सकते हैं-असाइन करें

d = {1:2,3:4}

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

या बड़े पैमाने पर परिवर्तन करें:

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

2
d = { changeKey(k): v for k, v in d.items()}
एरिक

4

शब्दकोश में सभी कुंजियों को परिवर्तित करने के लिए

मान लीजिए कि यह आपका शब्दकोश है:

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

नमूना शब्दकोश कुंजी में सभी डैश को अंडरस्कोर में बदलने के लिए:

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

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

मान लीजिए कि हम सूची तत्वों p = ['a', 'b'] में कुंजियों को बदलना चाहते हैं। निम्नलिखित कोड करेंगे:

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

और हम प्राप्त करते हैं

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

0

आप एक ही मान को कई कुंजियों के साथ जोड़ सकते हैं, या बस एक कुंजी को हटा सकते हैं और उसी मूल्य के साथ एक नई कुंजी जोड़ सकते हैं।

उदाहरण के लिए, यदि आपके पास कुंजियाँ हैं-> मान:

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

ऐसा कोई कारण नहीं है जिसे आप जोड़ purple->2या हटा नहीं सकते हैं red->1और जोड़ नहीं सकते हैंorange->1


0

एक ही बार में सभी चाबियों को बदलने के मामले में। यहां मैं चाबियों को तान रहा हूं।

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

मैंने इसका सटीक उत्तर नहीं देखा है:

dict['key'] = value

आप ऑब्जेक्ट विशेषताओं पर भी ऐसा कर सकते हैं। ऐसा करके उन्हें एक शब्दकोश में बनाएँ:

dict = vars(obj)

फिर आप ऑब्जेक्ट विशेषताओं में हेरफेर कर सकते हैं जैसे कि आप एक शब्दकोश चाहेंगे:

dict['attribute'] = value

1
मैं यह नहीं देख रहा हूं कि यह प्रश्न से कैसे संबंधित है; क्या आप विस्तृत कर सकते हैं?
अपराह्न
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.