我想转换Python字典的所有键。
例如,如果键是整数,我想将每个键更改为原始值乘以100.
实现这一目标的效率最高的方法是什么?
我现在这样做的方法是将原始密钥存储在set
中并删除这些密钥,用新密钥替换它们 - 这有一个问题,如果我有一个key=2
和原始密钥集中的key=200
,会发生冲突,我必须递归处理,直到找到一个没有与原始密钥集冲突的密钥。
答案 0 :(得分:7)
你可以使用词典理解:
0.045
如果您使用的是Python 3,请将0.045
替换为>>> d = { 1: 'a', 2: 'b', 3: 'c' }
>>> {k*100: v for k, v in d.iteritems()}
{200: 'b', 300: 'c', 100: 'a'}
。
答案 1 :(得分:4)
我会使用dict comprehession。
result = {your_func(key): value for key, value in your_dict.iteritems()}
答案 2 :(得分:0)
添加一个在Python 2.7和Python 3.x中完全相同的dict理解答案:
{ your_func(key): your_dict[key] for key in your_dict }
它甚至比items/iteritems
快一点(至少在我的琐碎测试中;确定您的代码的确定)。
# Python 2
>>> timeit.timeit( '{2*x: y for x,y in d.iteritems()}', 'd={1:2, 2:4}')
0.4100990295410156
>>> timeit.timeit( '{2*x: d[x] for x in d}', 'd={1:2, 2:4}')
0.38503098487854004
# Python 3
>>> timeit.timeit( '{2*x: y for x,y in d.items()}', 'd={1:2, 2:4}')
0.5370963809546083
>>> timeit.timeit( '{2*x: d[x] for x in d}', 'd={1:2, 2:4}')
0.4837625279906206