【问题标题】:How do I convert a list to a dictionary?如何将列表转换为字典?
【发布时间】:2013-08-27 14:17:28
【问题描述】:

我有一个这样的列表:

listedd = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K',]

我想把它转换成这样的字典:

{'AAA':'K', 'AAC': 'N', 'AAG':'K'}

【问题讨论】:

    标签: python list dictionary python-3.x


    【解决方案1】:

    逐个遍历列表,将结果压缩在一起,给出一个元组列表,作为您的键/值对,然后将该元组列表转换为字典:

    >>> dict(zip(l[::2],l[1::2]))
    {'AAG': 'K', 'AAA': 'K', 'AAC': 'N'}
    

    【讨论】:

      【解决方案2】:

      你可以试试这样的:

      >>> l = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K']
      >>>
      >>> v = iter(l)
      >>> {s: next(v) for s in v}
      {'AAG': 'K', 'AAA': 'K', 'AAC': 'N'}
      

      这是 Python 3.3.2 中的一个小时间比较:

      >>> from timeit import timeit
      >>> setup = "l = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K']"
      >>> 
      >>> timeit("v = iter(l); {s: next(v) for s in v}", setup)
      0.7127587589984614
      >>> 
      >>> timeit("dict(zip(l[::2],l[1::2]))", setup)
      1.4540460520001943
      >>> 
      >>> timeit("dict(zip(*[iter(l)]*2))", setup)
      1.395266197001547
      >>> 
      >>> timeit("{k: l[i+1] for i,k in enumerate(l) if not i%2}", setup)
      1.4753028479990462
      

      参考:

      【讨论】:

      • ... 或 dict((s, next(v)) for s in v) 用于旧版本。
      【解决方案3】:

      只是一些味道:

      d = { k : listedd[i+1] for i, k in enumerate(listedd) if not i % 2}
      

      【讨论】:

        【解决方案4】:

        我认为最短的方法是使用切片:

        >>> listedd = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K',]
        >>> result = dict(zip(listedd[::2], listedd[1::2]))
        {'AAA': 'K', 'AAC': 'N', 'AAG': 'K'}
        

        这段代码确实将列表的所有偶数元素映射到它的奇数元素。

        更新:我错过了之前的帖子,抱歉))

        【讨论】:

          【解决方案5】:

          iterzip的另一种使用方式:

          dict(zip(*[iter(listedd)]*2))
          

          或者,如果您更喜欢较长的程序而不是较短的程序:

          >>> listedd = ['AAA', 'K', 'AAC', 'N', 'AAG', 'K',]
          >>> it = iter(listedd)
          >>> z = zip(it,it)
          >>> d = dict(z)
          >>> print d
          {'AAG': 'K', 'AAA': 'K', 'AAC': 'N'}
          

          【讨论】:

            猜你喜欢
            • 2011-07-11
            • 1970-01-01
            • 2017-06-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多