将长列表/数组放入以索引为键的字典中

时间:2019-06-09 13:22:32

标签: python numpy

我正在尝试解决编码练习。 其中一部分是根据随机整数列表创建字典。 字典的原始列表中元素的索引必须为key,列表中元素的索引必须为value

这是我的功能:

def my_funct(pricesLst):
    price_dict = {}
    for i in range(0, len(pricesLst)):
        price_dict[i] = pricesLst[i]

    print(price_dict)


a = np.random.randint(1,100,5)

my_funct(a)

我得到的输出是之一:

{0: 42, 1: 23, 2: 38, 3: 27, 4: 61}

但是如果列表较长,我将得到奇怪的结果作为输出。

示例:

a = np.random.randint(1,1000000000,5000000)
my_funct(a)

输出为:

{2960342: 133712726, 2960343: 58347003, 2960344: 340350742, 949475: 944928187.........4999982: 417669027, 4999983: 650062265, 4999984: 656764316, 4999985: 32618345, 4999986: 213384749, 4999987: 383964739, 4999988: 229138815, 4999989: 203341047, 4999990: 54928779, 4999991: 139476448, 4999992: 244547714, 4999993: 790982769, 4999994: 298507070, 4999995: 715927973, 4999996: 365280953, 4999997: 543382916, 4999998: 532161768, 4999999: 598932697}

我不确定为什么会发生。 为什么我的字典中的键不是从最短的列表开始才从0开始?

我唯一想到的是列表太长,因此是python,而不是使用从0开始的索引作为键,而是将内存中的空间关联了。

2 个答案:

答案 0 :(得分:2)

因为python中的字典不一定要排序。您应该使用以下声明的有序字典:

my_ordered_dict=OrderedDict()

答案 1 :(得分:1)

字典在python 3.7中排序。如果您的Python版本较旧(<3.7),则必须使用有序字典。

您可以按以下方式使用有序词典:

from collections import OrderedDict
import numpy as np
def my_funct(pricesLst):
    price_dict = OrderedDict()
    for i in range(0, len(pricesLst)):
        price_dict[i] = pricesLst[i]
    print(price_dict)

a = np.random.randint(1,10000,10000)

my_funct(a)