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

Python 将长列表/数组放入以索引为键的字典中,python,numpy,Python,Numpy,我正在尝试解决一个编码练习。 它的一部分是从一个随机的整数列表创建一个字典。 字典必须具有原始列表中元素的as键索引和as值列表元素 这是我的职责: 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

我正在尝试解决一个编码练习。 它的一部分是从一个随机的整数列表创建一个字典。 字典必须具有原始列表中元素的as
索引和as
列表元素

这是我的职责:

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开始的索引作为键,而是将内存中的空间关联起来。

因为python中的dict不一定是有序的。您应该使用一个有序字典,该字典声明为:

my_ordered_dict=OrderedDict()

这些词典是在python 3.7中排序的。如果您是较旧的python版本(它是高达
100000000
的随机整数,根据您的随机函数,您的输出与预期一致,还取决于您使用的python。在python36之前,dicts插入顺序是不保证的,在Python37之前,dicts插入顺序不是一种语言功能,但是我的price_dict的键不应该从
开始到len(pricesLst)
?这意味着输出将类似于:
{0:some\u number,1:some\u number,…499999:some\u number}
请注意我对词典和插入顺序的评论,如果你想在python37之前拥有一个有序词典,你需要使用
orderedict
谢谢,我理解并使用orderedict()对其进行了更改,但是,第一个键仍然不是从0开始的。谢谢,我明白了。我更改了代码,但仍然是if
a=np.random.randint(1100000000001000000)
,第一个键不是从0@FBSO已排序的
!=
插入ordered@FBSO,查看您的输出,您似乎只看到最后n个条目。您要求系统打印一百万行,因此不确定您看到的输出是否是前几项和最后几项。前几项可能是一些在中间,我会用一个简单的语句来检查,例如:打印([x在pRice,Dist.[])[0:10]中查看实际的前几个键和值。
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)