代码之家  ›  专栏  ›  技术社区  ›  Ben

根据已定义的字典/顺序,将列表映射为字典值

  •  0
  • Ben  · 技术社区  · 6 年前

    以这个词典和列表为例:

    dict = {"a": 0, "b": 0, "c": 0}
    list = (1, 2, 3, 4)
    

    将列表映射到每个字典值的最佳方法是什么,以便我最终得出以下结论:

    dict = {"a": 1, "b": 2, "c": 3}

    我知道我可以这样做,但我宁愿有一个更干净的解决方案:

    i = 0
    for key in dict.keys():
      dict[key] = list[i]
      i += 1
    
    5 回复  |  直到 6 年前
        1
  •  2
  •   mad_    6 年前

    听写理解

    dict1 = {"a": 0, "b": 0, "c": 0}
    list1 = (1, 2, 3, 4)
    
    {k:v for k,v in zip(dict1.keys(),list1)}
    

    或者只是

    dict(zip(dict1.keys(),list1))
    
        2
  •  3
  •   rammelmueller    6 年前

    Python字典不是预先排序的-但是,您可以这样做:

    for k, key in enumerate(sorted(d.keys())):
        d[key] = l[k]
    

    PS:我不会叫你的变量 dict list

        3
  •  2
  •   willeM_ Van Onsem    6 年前

    考虑到字典保持顺序,并非所有版本的Python都是这样,您可以使用以下方法构造这样的字典:

    dict(zip(mydict, mylist))

    >>> mydict = {"a": 0, "b": 0, "c": 0}
    >>> mylist = (1, 2, 3, 4)
    >>> dict(zip(mydict, mylist))
    {'a': 1, 'b': 2, 'c': 3}
    

    zip(..) dict(..) 将两个元组的iterable转换为字典,其中每个2元组是一个键值对。

        4
  •  2
  •   jose_bacoy    6 年前

    使用enumerate获取词典的索引和键,然后将它们放入新词典中。

    mydict = {"a": 0, "b": 0, "c": 0}
    mylist = [1, 2, 3, 4]
    newdict = {k: mylist[i] for i, k in enumerate(mydict)}
    newdict
    
    {'a': 1, 'b': 2, 'c': 3}
    
        5
  •  2
  •   wilkben    6 年前

    注意字典是无序的集合。这意味着不能保证列表中的数字将按键声明的顺序分配给字典中的键。

    不管怎样,实现您发布的代码功能的更简洁的方法是

    for i, key in enumerate(dict.keys()):
        dict[key] = list[i]
    

    编辑

    从python3.7开始,字典保证遵循插入顺序。

    https://docs.python.org/3/library/stdtypes.html#dict.values