将函数应用于Python dict的所有键

时间:2016-10-27 12:52:48

标签: python python-2.7

我想转换Python字典的所有键。

例如,如果键是整数,我想将每个键更改为原始值乘以100.

实现这一目标的效率最高的方法是什么?

我现在这样做的方法是将原始密钥存储在set中并删除这些密钥,用新密钥替换它们 - 这有一个问题,如果我有一个key=2和原始密钥集中的key=200,会发生冲突,我必须递归处理,直到找到一个没有与原始密钥集冲突的密钥。

3 个答案:

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