【问题标题】:Is it more efficient to create a dictionary in python using zip or a list comprehension?使用 zip 或列表理解在 python 中创建字典是否更有效?
【发布时间】:2011-02-18 16:32:08
【问题描述】:

假设我想在 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 optimization dictionary zip list-comprehension


    【解决方案1】:

    enumerate function 可能是创建dict 的最简单方法:

    dict_c = dict(enumerate(characters))
    

    但是,我不确定这给了你什么是你不能用字符串做的。以下似乎等同于我:

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

    【讨论】:

    • 最大的好处是不需要更新 xrange 参数?
    • @Zxaos 和清晰度,IMO。对于我们的序列,您仍然可以使用 xrangelen 来完成,但这更加简洁明了。
    • 是的,它适用于字符串大小。此外,它更短,并且可能在底层用 C 语言编写,因此速度更快。
    • Hrm,我明白你对字符串的意思了。我希望的是双向的一对一映射,这样我就可以执行 dict_c[3] = a 然后 dict_c.some_method(a) = 3。也就是说,我想我可以反转密钥-字典中的值对,将其用于字符查找,然后将字符串用于数字查找。或者,我可以将逆映射添加到同一个字典中,这样一对 k-v 是 0-a,另一个是 a-0。
    • 但是,用从 0 开始的整数键编写 dict 的最佳方法是...list。索引也需要恒定的时间,而不需要散列。
    猜你喜欢
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 2010-12-17
    • 2015-05-22
    • 2018-03-30
    相关资源
    最近更新 更多