由于计划不周,我有一个脚本需要一个带有某些键的python dict但是,创建这个dict的另一个脚本使用不同的命名约定。
不幸的是,由于翻译已经发生,看起来我需要转换dict键。
基本上来自
{'oldKey':'data'}
到
{'newKey':'data'}
我在想创造一个词典:
{'oldKey':'newKey'}
并遍历dict以从oldKey转换为newKey但是这是最有效/ pythonic方式吗?
答案 0 :(得分:0)
我可以想到使用词典的几种方法,但其中一种方法可能更有效,具体取决于密钥用法的覆盖范围。
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']
答案 1 :(得分:0)
这将解决您的问题:
new_dict={key_map[oldkey]: vals for (oldkey, vals) in old_dict.items()}