2013-07-29 11 views
9

में कुंजियों (तार) शब्दकोश की जगह CSV आयात के बाद, मैं अलग भाषा में कुंजी के साथ शब्दकोश निम्नलिखित है:अजगर

dic = {'voornaam': 'John', 'Achternaam': 'Davis', 'telephone': '123456', 'Mobielnummer': '234567'} 

अब मैं अंग्रेजी और (भी सभी लोअरकेस करने के लिए) के लिए कुंजी बदलना चाहते हैं। जो होना चाहिए:

dic = {'first_name': 'John', 'last_name': 'Davis', 'phone': '123456', 'mobile': '234567'} 

मैं इसे कैसे प्राप्त कर सकता हूं?

+1

क्यों downvotes? मुझे लगता है कि मुझे यह जानने की जरूरत है कि मैं सवाल क्यों सुधार सकता हूं। – chhantyal

+0

प्रश्न अधिक शोध प्रयास नहीं दिखाता है। उदाहरण के लिए, आप किस दृष्टिकोण (ईएस) को समझते हैं? क्या आपने उनमें से किसी को लागू करने का प्रयास किया है? जब आपने कोशिश की तो क्या हुआ? – kojiro

उत्तर

23

आप प्रकार शब्दकोश है, यह बिल्कुल फिट बैठता है

>>> dic = {'voornaam': 'John', 'Achternaam': 'Davis', 'telephone': '123456', 'Mobielnummer': '234567'} 
>>> tr = {'voornaam':'first_name', 'Achternaam':'last_name', 'telephone':'phone', 'Mobielnummer':'mobile'} 
>>> dic = {tr[k]: v for k, v in dic.items()} 
{'mobile': '234567', 'phone': '123456', 'first_name': 'John', 'last_name': 'Davis'} 
+0

बहुत अच्छा लग रहा है, धन्यवाद :) – chhantyal

+0

मुझे नहीं लगता कि ओपी मूल्यों को कम करने के लिए चाहते हैं, क्या मुझे कुछ याद आया? –

+0

हां वास्तव में, मैं चाबियाँ अंग्रेजी और सभी लोअरकेस होना चाहता हूं, मान नहीं। – chhantyal

1
name_mapping = { 
    'voornaam': 'first_name', 
    ... 
} 

dic = your_dict 

# Can't iterate over collection being modified, 
# so change the iterable being iterated. 
for old, new in name_mapping.iteritems(): 
    value = dic.get(old, None) 
    if value is None: 
     continue 

    dic[new] = value 
    del dic[old] 
1

समाधान ऊपर अच्छा काम करता है अगर कोई इनपुट dict में वस्तुओं शब्दकोश नेस्टेड रहते हैं।

नीचे अधिक सामान्यीकृत उपयोगिता फ़ंक्शन है जो मौजूदा कुंजी को दोबारा कुंजियों के साथ दोबारा बदल देता है।

def update_dict_keys(obj, mapping_dict): 
    if isinstance(obj, dict): 
     return {mapping_dict[k]: update_dict_keys(v, mapping_dict) for k, v in obj.iteritems()} 
else: 
    return obj 

टेस्ट:

dic = {'voornaam': 'John', 'Achternaam': 'Davis', 
'telephone':'123456', 'Mobielnummer': '234567', 
"a": {'Achternaam':'Davis'}} 
tr = {'voornaam': 'first_name', 'Achternaam': 'last_name', 
'telephone':'phone', 'Mobielnummer': 'mobile', "a": "test"} 

आउटपुट:

{ 
'test': { 
    'last_name': 'Davis' 
}, 
'mobile': '234567', 
'first_name': 'John', 
'last_name': 'Davis', 
'phone': '123456' 
}