使用zip或列表理解在python中创建字典是否更有效?

使用zip或列表理解在python中创建字典是否更有效?,python,optimization,dictionary,zip,list-comprehension,Python,Optimization,Dictionary,Zip,List Comprehension,假设我想使用python中的字典设置一个基本的文本编码 有两种方法可以做到这一点,一种是使用zip,另一种是使用列表理解 characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ .,!;" dict_a = dict((x, characters[x]) for x in xrange(0, 31)) dict_b = dict(zip(xrange(0, 31), characters)) 以下哪一项更有效?(实际编码长度大于31,这是一个玩具示例)。差异显著吗 或

假设我想使用python中的字典设置一个基本的文本编码

有两种方法可以做到这一点,一种是使用zip,另一种是使用列表理解

characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ .,!;"
dict_a = dict((x, characters[x]) for x in xrange(0, 31))
dict_b = dict(zip(xrange(0, 31), characters))
以下哪一项更有效?(实际编码长度大于31,这是一个玩具示例)。差异显著吗

或者,我是不是走错了路,应该用字典以外的东西?(我需要能够双向编码)。

这可能是创建您的
dict
最简单的方法:

dict_c = dict(enumerate(characters))
然而,我不确定这给了你什么,你不能用字符串。在我看来,以下几点似乎相当:

>>> dict_c[3]
'D'
>>> characters[3]
'D'

最重要的好处是不需要更新xrange参数?@Zxaos和clarity,依我看。您仍然可以使用序列的
xrange
len
,但这更简洁明了。是的,它适用于和字符串大小。另外,它更短,而且可能是用C写的,所以更快。Hrm,我明白你说的字符串的意思了。我所希望的是一个双向的一对一映射,这样我就可以做dict_c[3]=a,然后再做dict_c。一些方法(a)=3。也就是说,我想我可以反转字典中的键值对,将其用于字符查找,然后使用字符串进行数字查找。或者,我可以将反向映射添加到同一个字典中,这样一个k-v对是0-a,另一个是a-0。但是,使用从0开始的整数键编写dict的最佳方法是。。。一个
列表
。索引也需要固定的时间,而不需要散列。