【问题标题】:Make Dictionary From 2 List [duplicate]从2个列表制作字典[重复]
【发布时间】:2010-12-20 01:44:53
【问题描述】:

试图用 2 个列表制作字典,一个是键,一个是值,但我遇到了问题。这是我目前所拥有的:

d={}
for num in range(10):
    for nbr in range(len(key)):
        d[num]=key[nbr]

假设我的键是从 1 到 9 的列表,值列表是 [2,4,0,9,6,6,8,6,4,5]

我该如何分配,使它像{0:2, 1:4, etc...}

【问题讨论】:

  • 如果“my key is a list from 1 to 9”(含),而你的value list有10个条目,那么就像上海人说的,你在竹蒸笼里,筷子断了,上苏州河桨。

标签: python list dictionary


【解决方案1】:

zip() 来救援!

>>> k = range(1,10)   # or some list or iterable of sorts
>>> v = [2,4,0,9,6,6,8,6,4,5]
>>> d = dict(zip(k,v))
>>> d
{1: 2, 2: 4, 3: 0, 4: 9, 5: 6, 6: 6, 7: 8, 8: 6, 9: 4}
>>>

有关更多详细信息,请参阅 Python 文档中的zip() built-in function

注意,关于 range() 和“键”列表。
问题为“key is a list from 1 to 9”(即 9 个不同的键),但值列表显示 10 个不同的值。这提供了讨论两点“细节”的机会:

  • 上面 sn-p 中的 range() 函数将产生 1 到 9 的范围,这是因为如果提供了起始值(1,此处),则始终包括在内,而结束值(10,此处)从不包括在内。
  • zip() 函数在包含最短可迭代项的最后一项的迭代后停止(在我们的例子中,省略了列表的最后一个值“5”)

【讨论】:

    【解决方案2】:

    如果您专门映射索引,请使用 enumerate 内置函数而不是 zip/range。

    dict(enumerate([2,4,0,9,6,6,8,6,4,5]))
    

    【讨论】:

    • 很难理解为什么你需要创建一个使用范围作为键的字典,除非你将它传递给不能使用列表的东西。
    【解决方案3】:
    values = [2,4,0,9,6,6,8,6,4,5]
    d = dict(zip(range(10), values))
    

    【讨论】:

      【解决方案4】:
      mydict = dict(zip(range(10), [2,4,0,9,6,6,8,6,4,5]))
      

      【讨论】:

        【解决方案5】:

        应该是这样的

        dict(zip(a,b))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-11-30
          • 1970-01-01
          • 1970-01-01
          • 2018-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多