Обращение к словарю по индексу со списка

Есть следующий код

import random    


number = list('1334')
random_width = random.randint(0, 400)

segment_width = {
        '0': {
            'xmin': 0,
            'xmax': random_width / 4
        },
        '1': {
            'xmin': random_width / 4,
            'xmax': random_width / 2
        },
        '2': {
            'xmin': random_width / 2,
            'xmax': 3 * (random_width / 4)
        },
        '3': {
            'xmin': 3 * (random_width / 4),
            'xmax': random_width
        }
    }
for sym in number:
    print(segment_width[str(number.index(sym))])

Он выводит следующее:

{'xmin': 0, 'xmax': 45.5}
{'xmin': 45.5, 'xmax': 91.0}
{'xmin': 45.5, 'xmax': 91.0}
{'xmin': 136.5, 'xmax': 182}

Почему по индексу 1 и 2 выводит данные первой 3-ки со списка, а не их отдельные значения? И как это исправить, когда значения списка одинаковые?


Ответы (1 шт):

Автор решения: Zhihar

index() is an inbuilt function in Python, which searches for a given element from the start of the list and returns the lowest index where the element appears.

ну вот ваша тройка встречается впервые по индексу 1, поэтому вы ее и получаете 2 раза по индексу 1

или вы хотели число 1234 записать?

т.е. ваш кол делает следующее:

  1. разбил строку 1334 в список ['1', '3', '3', '4']

  2. для каждого значения определяется его ближайшее к началу позиция в списке ['1', '3', '3', '4']

  3. индекс переводится в строку

  4. из словаря по строке-ключу выбирается значение

для ['1', '3', '3', '4'] получаем индексы соответственно 0, 1, 1, 3

→ Ссылка