Длинный список / массив в словарь с индексами в качестве ключа - PullRequest
1 голос
/ 09 июня 2019

Я пытаюсь решить упражнение по кодированию.Частично это создание словаря из случайного списка целых чисел.Словарь должен иметь как 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}

HOWEVER если список длиннее, я получаю странные результаты в качестве вывода.

Пример:

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 ]

2 голосов
/ 09 июня 2019

Потому что дикты в python не обязательно упорядочены.Вы должны использовать упорядоченный словарь, который объявлен как:

my_ordered_dict=OrderedDict()
1 голос
/ 09 июня 2019

Словари упорядочены в python 3.7.Если вы старше Python (<3.7), вам придется использовать упорядоченный словарь. </p>

Вы можете использовать упорядоченный словарь следующим образом:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...