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

时间:2019-07-15 20:16:34

标签: python dictionary

以该词典和列表为例:

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 个答案:

答案 0 :(得分:3)

Python字典没有先验排序-但是,您可以执行以下操作:

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

PS:我不会将您的变量dictlist称为内置函数。

答案 1 :(得分:2)

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

无论如何,实现您发布的代码功能的一种更干净的方法是

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

修改

从python 3.7开始,保证字典遵守插入顺序。

  

在3.7版中进行了更改:保证字典顺序为插入顺序。此行为是3.6版CPython的实现细节。

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

答案 2 :(得分:2)

鉴于字典保持顺序,如果不是所有版本的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(..)将两个元组的可迭代对象转换为字典,其中每个2元组都是一个键值对。

答案 3 :(得分:2)

字典理解

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))

答案 4 :(得分:2)

使用枚举获取字典的索引和键,然后将其理解为新字典。

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}