我想从列表中创建字典。
import numpy as np
a1 = [1,2,3,4,5,6,7,8,9]
b1 = ['a','b','c','d','e','f','g','h','i']
c1 = ['A','B','C','D','E','F','G','H','I']
array2 = np.array([a1,b1,c1]).tolist()
keys = ['name', 'type','description','logo']
print dict(zip(keys, zip(*array2)))
输出:
{'logo': ('4', 'd', 'D'), 'type': ('2', 'b', 'B'), 'name': ('1', 'a', 'A'), 'description': ('3', 'c', 'C')}
为什么我只得到4个元素
为什么字典元素按随机顺序为4,2,1,3以及为什么
不是1,2,3,4?
答案 0 :(得分:3)
返回的列表的长度被截断为最短参数序列的长度。
由于keys
只包含4个元素,因此zip(keys, zip(*array2))
生成的压缩列表也会包含4个值,因此dict
只包含4个值。
无法保证普通字典中元素的顺序。我认为它是特定于实现的,通常基于键的哈希的顺序。如果您想维护特定订单,则应使用OrderedDict
:
import numpy as np
from collections import OrderedDict
a1 = [1,2,3,4,5,6,7,8,9]
b1 = ['a','b','c','d','e','f','g','h','i']
c1 = ['A','B','C','D','E','F','G','H','I']
array2 = np.array([a1,b1,c1]).tolist()
keys = ['name', 'type','description','logo']
print OrderedDict(zip(keys, zip(*array2)))
# prints: OrderedDict([('name', ('1', 'a', 'A')), ('type', ('2', 'b', 'B')), ('description', ('3', 'c', 'C')), ('logo', ('4', 'd', 'D'))])