字典没有给出所有元素 - Python

时间:2016-06-09 14:26:04

标签: python numpy dictionary

我想从列表中创建字典。

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?

1 个答案:

答案 0 :(得分:3)

为什么我只获得4个元素?

根据zip documentation

  

返回的列表的长度被截断为最短参数序列的长度。

由于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'))])