Python 最好用一行代码来翻转字典的键和值
我写了一行代码来实现这一点:Python 最好用一行代码来翻转字典的键和值,python,Python,我写了一行代码来实现这一点: vocab_tag = dict(zip(*reversed(zip(*tag_vocab.items())))) 有人能写一篇更容易理解/更直接的文章吗?一篇可读且简短的文章可能是最好的: vocab_tage = {value: key for key, value in tag_vocab.items()} 在2.7之前,字典理解不存在,但我们可以用dict()和生成器表达式来代替它们: vocab_tage = dict((value, key) for
vocab_tag = dict(zip(*reversed(zip(*tag_vocab.items()))))
有人能写一篇更容易理解/更直接的文章吗?一篇可读且简短的文章可能是最好的:
vocab_tage = {value: key for key, value in tag_vocab.items()}
在2.7之前,字典理解不存在,但我们可以用dict()
和生成器表达式来代替它们:
vocab_tage = dict((value, key) for key, value in tag_vocab.items())
值得注意的是,这假定没有具有相同值的键(如问题中的示例所示)。尝试以下一行:
dict(map(reversed,table.items())
性能+可读性
考虑到时间性能,这是最好的解决方案。它既可读又实用
给定字典,a
,定义为
a = {'1' : 'a', '2' : 'b', '3' : 'c', '4' : 'd'}
这些实现以以下方式执行:
起初的
的
的
对用户使用方法的修改
%%timeit
b = dict(zip(*reversed(zip(*a.items()))))
100000 loops, best of 3: 3.09 µs per loop
%%timeit
c = {v: k for k, v in a.items()}
1000000 loops, best of 3: 776 ns per loop
%%timeit
d = dict(map(reversed, a.items()))
100000 loops, best of 3: 4.38 µs per loop
%%timeit
e = {v: k for k, v in a.iteritems()}
1000000 loops, best of 3: 598 ns per loop