7

我写了一个单行来完成这个:

vocab_tag = dict(zip(*reversed(zip(*tag_vocab.items()))))

有人可以写一个更容易理解/更直接的吗?

4

3 回答 3

15

可读且简短的dict 理解可能是最好的:

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())

值得注意的是,这假定没有具有相同值的键(与问题中的示例一样)。

于 2013-01-02T23:52:57.927 回答
2

试试这个单行:dict(map(reversed, table.items()))

于 2013-01-03T03:20:20.413 回答
2

性能+可读性

考虑到时间性能,字典理解是最好的解决方案。它既可读又高性能。

给定一个字典,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

Noctis Skytower回答

%%timeit 
d = dict(map(reversed, a.items()))

100000 loops, best of 3: 4.38 µs per loop

使用方法修改Gareth Latty答案.iteritems()

如果使用 < Python 3,.iteritems()执行速度会稍快一些,并且内存效率更高

%%timeit
e = {v: k for k, v in a.iteritems()}

1000000 loops, best of 3: 598 ns per loop
于 2016-07-11T12:58:04.750 回答