簡體   English   中英

將Python Dict鍵映射到另一個Dict

[英]Mapping Python Dict keys to another Dict

由於計划不周,我有一個腳本期望帶有某些鍵的python dict,但是創建此dict的另一個腳本使用的是不同的命名約定。

不幸的是,由於已經進行了翻譯,因此我似乎需要轉換dict鍵。

基本上從

 {'oldKey':'data'}

 {'newKey':'data'}

我當時想創建一個字典:

 {'oldKey':'newKey'}

並遍歷字典,將oldKey轉換為newKey,但這是最有效/最有效的方法嗎?

我可以想到使用字典的幾種方法,但是其中一種方法可能會更有效,具體取決於鍵用法的范圍。

a)具有字典理解能力:

old_dict = {'oldkey1': 'val1', 'oldkey2': 'val2',
            'oldkey3': 'val3', 'oldkey4': 'val4',
            'oldkey5': 'val5'}

key_map = {'oldkey1': 'newkey1', 'oldkey2': 'newkey2',
           'oldkey3': 'newkey3', 'oldkey4': 'newkey4',
           'oldkey5': 'newkey5'}

new_dict = {newkey: old_dict[oldkey] for (oldkey, newkey) in key_map.iteritems()}

print new_dict['newkey1']

b)使用一個簡單的類進行映射。 (請注意,在此示例中,我已在key_map中切換了鍵/值的順序。)這可能會更有效,因為它將使用惰性評估-無需遍歷所有鍵-如果不是所有鍵都可以節省時間用過的。

class DictMap(object):

    def __init__(self, key_map, old_dict):
        self.key_map = key_map
        self.old_dict = old_dict

    def __getitem__(self, key):
        return self.old_dict[self.key_map[key]]

key_map = {'newkey1': 'oldkey1',
           'newkey2': 'oldkey2',
           'newkey3': 'oldkey3',
           'newkey4': 'oldkey4',
           'newkey5': 'oldkey5'}

new_dict2 = DictMap(key_map, old_dict)

print new_dict2['newkey1']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM