better one-liner to flip keys and values of a dictionary
我已经写了一行代码来完成这个任务:
1 | vocab_tag = dict(zip(*reversed(zip(*tag_vocab.items())))) |
有人能写一个更容易理解/更直接的吗?
阅读和简短的听写理解可能是最好的:
1 | vocab_tage = {value: key for key, value in tag_vocab.items()} |
pre 2.7,字典理解不存在,但我们可以用
1 | vocab_tage = dict((value, key) for key, value in tag_vocab.items()) |
值得注意的是,这假定没有具有相同值的键(与问题中的示例相同)。
性能+可读性
考虑到时间性能,词典理解是最好的解决方案。它既可读又具有性能。
给定字典,
1 | a = {'1' : 'a', '2' : 'b', '3' : 'c', '4' : 'd'} |
实现的执行方式如下:
原件1 2 | %%timeit b = dict(zip(*reversed(zip(*a.items())))) |
1 | 100000 loops, best of 3: 3.09 μs per loop |
加雷斯·拉蒂的回答
1 2 | %%timeit c = {v: k for k, v in a.items()} |
1 | 1000000 loops, best of 3: 776 ns per loop |
诺提斯天空塔的回答
1 2 | %%timeit d = dict(map(reversed, a.items())) |
1 | 100000 loops, best of 3: 4.38 μs per loop |
用
如果使用
1 2 | %%timeit e = {v: k for k, v in a.iteritems()} |
1 | 1000000 loops, best of 3: 598 ns per loop |
试试这句话: