2013-07-29 52 views
9

Sau khi nhập CSV, tôi đã theo từ điển với các phím bằng ngôn ngữ khác nhau:thay thế các khóa từ điển (chuỗi) trong Python

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

Bây giờ tôi muốn thay đổi phím sang tiếng Anh và (còn cho tất cả các chữ thường). Nên là:

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

Làm cách nào để đạt được điều này?

+1

Tại sao downvotes? Tôi nghĩ rằng tôi cần phải biết lý do tại sao để tôi có thể cải thiện câu hỏi. – chhantyal

+0

Câu hỏi không cho thấy nhiều nỗ lực nghiên cứu. Ví dụ, cách tiếp cận nào có ý nghĩa với bạn? Bạn đã thử triển khai bất kỳ ứng dụng nào trong số đó chưa? Điều gì đã xảy ra khi bạn thử? – kojiro

Trả lời

23

bạn có loại từ điển, nó phù hợp một cách hoàn hảo

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

trông tuyệt vời, cảm ơn :) – chhantyal

+0

Tôi không nghĩ rằng OP muốn chuyển đổi giá trị thành lowecase, tôi có bỏ sót gì không? –

+0

Có thực sự, tôi muốn chìa khóa để được tiếng Anh và tất cả các chữ thường, không phải giá trị. – 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

Trên giải pháp hoạt động tuyệt vời nếu không có lồng đối tượng từ điển trong dict đầu vào.

Dưới đây là chức năng tiện ích tổng quát hơn, thay thế các khóa hiện có bằng tập hợp khóa mới một cách đệ quy.

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 

Test:

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

Output:

{ 
'test': { 
    'last_name': 'Davis' 
}, 
'mobile': '234567', 
'first_name': 'John', 
'last_name': 'Davis', 
'phone': '123456' 
} 
Các vấn đề liên quan