python - 将列表转换为字典的有效方法

标签 python

我需要帮助以最有效的方式将以下列表转换为字典:

l = ['A:1','B:2','C:3','D:4']  

目前,我在做以下事情:

mydict = {}
for e in l:
    k,v = e.split(':')
    mydict[k] = v

不过,我相信应该有一种更有效的方法来实现同样的目标。有什么想法吗?

最佳答案

dict() 与生成器表达式一起使用:

>>> lis=['A:1','B:2','C:3','D:4']
>>> dict(x.split(":") for x in lis)
{'A': '1', 'C': '3', 'B': '2', 'D': '4'}

使用 dict-comprehension(如@PaoloMoretti 所建议):

>>> {k:v for k,v in (e.split(':') for e in lis)}
{'A': '1', 'C': '3', 'B': '2', 'D': '4'}

10**6 项的计时结果:

>>> from so import *
>>> %timeit case1()
1 loops, best of 3: 2.09 s per loop
>>> %timeit case2()
1 loops, best of 3: 2.03 s per loop
>>> %timeit case3()
1 loops, best of 3: 2.17 s per loop
>>> %timeit case4()
1 loops, best of 3: 2.39 s per loop
>>> %timeit case5()
1 loops, best of 3: 2.82 s per loop

so.py:

a = ["{0}:{0}".format(i**2) for i in xrange(10**6)]

def case1():
    dc = {}
    for i in a:
        q, w = i.split(':')
        dc[q]=w

def case2():
    dict(x.split(":") for x in a)


def case3():
    {k:v for k,v in (e.split(':') for e in a)}

def case4():
    dict([x.split(":") for x in a])

def case5():
    {x.split(":")[0] : x.split(":")[1] for x in a}

关于python - 将列表转换为字典的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16374540/

相关文章:

python - Django TemplateSyntaxError 与模板标签

python - 在python中转换为日期时间

python - 来自 sys.platform 的可能值?

python - 关于 sqlalchemy 中的 unique=True 和 (unique=True, index=True)

python - 使用 Python 进行网络摄像头运动跟踪

python - 计算双阶乘时出现问题 : computer or code?

Python argparse 位置参数和子命令

python - 多项选择计划和迭代 (2.7)

python - 从 Pandas 日期时间索引计算耗时 timedelta

python - 我如何开始使用 Tkinter?