使用python从列表中创建字典

pro*_*eek 27 python dictionary list

我需要将列表转换为字典,如下所示.奇数元素具有键,偶数元素具有值.

x = (1,'a',2,'b',3,'c') - > {1: 'a', 2: 'b', 3: 'c'}

def set(self, val_): 
    i = 0 
    for val in val_: 
        if i == 0: 
            i = 1 
            key = val 
        else: 
            i = 0 
            self.dict[key] = val 
Run Code Online (Sandbox Code Playgroud)

获得相同结果的更好方法是什么?

添加

i = iter(k)
print dict(zip(i,i))
Run Code Online (Sandbox Code Playgroud)

好像在起作用

Ale*_*lli 37

dict(x[i:i+2] for i in range(0, len(x), 2))
Run Code Online (Sandbox Code Playgroud)

  • @ user2601010,它只是使用Python的一些基本构建块 - 调用`dict`(带有一系列2项"对")来构建字典,切片列表,生成器表达式和`range`构建 - 在.您不清楚这四个基本概念中的哪一个?(我的书"果壳里的Python"当然解释了所有这些,还有更多,但是,它的全文不适合评论:-). (5认同)
  • 你能解释一下这个答案吗? (4认同)

Joh*_*ooy 12

以下是Python3使用dict理解的几种方法

>>> x = (1,'a',2,'b',3,'c')
>>> {k:v for k,v in zip(*[iter(x)]*2)}
{1: 'a', 2: 'b', 3: 'c'}
>>> {x[i]:x[i+1] for i in range(0,len(x),2)}
{1: 'a', 2: 'b', 3: 'c'}
Run Code Online (Sandbox Code Playgroud)


Mar*_*nen 11

>>> x=(1,'a',2,'b',3,'c')
>>> dict(zip(x[::2],x[1::2]))
{1: 'a', 2: 'b', 3: 'c'}
Run Code Online (Sandbox Code Playgroud)

  • 校正,gnibbler的dict comps在我的系统上都更快(2.58us,3.51us),而我的Python3.1.2(4.75us与Python2.6.5 4us)相比更慢. (2认同)