2010-12-10 11 views
179

मैं एक पायथन शब्दकोश में एक प्रविष्टि की कुंजी को बदलना चाहता हूं।शब्दकोश में एक कुंजी का नाम बदलें

क्या ऐसा करने का कोई सीधा तरीका है?

+0

** भी देखें **: http://stackoverflow.com/questions/30720673/renaming-the-keys-of-a-dictionary – dreftymac

उत्तर

372

आसानी 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 
+23

यह अगर कुंजी मौजूदा नहीं है एक KeyError किसी भी तरह से बढ़ा देंगे , लेकिन आप –

0

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

उदाहरण के लिए

, आप कुंजी> मान है, तो:

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

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

3

यह करने के लिए कोई सीधा रास्ता में जोड़ सकते हैं, लेकिन आप हटाना-से-असाइन

d = {1:2,3:4} 

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

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

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

pop'n'fresh

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

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

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} 

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

+2

से बचने के लिए 'dict [new_value] = dict.pop (old_value, some_default_value) 'का उपयोग कर सकते हैं, यह मौजूदा अपडेट को अपडेट करने के बजाय एक नया शब्दकोश बनाता है - जो महत्वपूर्ण नहीं हो सकता है, लेकिन यह नहीं पूछा गया था । – martineau

+9

एक शब्दकोश समझ के साथ एक ही जवाब: '{d1 [key]: कुंजी के लिए मान, d.items()} – Morwenn

4

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

dict['key'] = value 

तुम भी गुण वस्तु को यह कर सकते हैं:

-2

मैं इस सटीक जवाब नहीं देखा है। ऐसा करने से एक शब्दकोश में उन्हें बनाओ:

dict = vars(obj) 

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

dict['attribute'] = value 
+0

में मान मैं नहीं देख रहा हूं कि यह प्रश्न से कैसे संबंधित है; क्या आप विस्तार से बता सकते हैं? – apraetor

15

अजगर 2.7 और उसके बाद वाले समझ शब्दकोश का उपयोग कर सकते हैं: यह एक उदाहरण है जो मुझे एक DictReader का उपयोग कर एक CSV पढ़ने के दौरान सामना करना पड़ा।कुंजी में '::'

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

अनुगामी से छुटकारा पाने के उपयोगकर्ता के साथ सभी कॉलम नामों प्रत्यय था '':

corrected_dict = { x.replace(':', ''): ori_dict[x] for x in ori_dict.keys() }

+0

"विशेषताइरर: 'dict' ऑब्जेक्ट में कोई विशेषता नहीं है ' – user1318135

+1

उपयोगकर्ता1318125, मैं कॉपी कॉपी पेस्ट का सुझाव दूंगा। यह पाइथन कंसोल में मेरे लिए काम करता है (.replace को स्ट्रिंग पर निष्पादित किया जा रहा है जिसे कुंजी के रूप में उपयोग किया जाता है) –

1

आप एक जटिल dict है, इसका मतलब है कि dict के भीतर एक dict या list है:

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