Я только изучаю python, и у меня есть проблема. как я могу напечатать несколько индексов определенного значения в словаре? В частности, я хочу напечатать индекс каждого элемента массива Dictionary_title, ключом которого является gender_ids
.
dictionary_title = {
{'label': 'Green', 'genre_ids': 878},
{'label': 'Pink', 'genre_ids': 16},
{'label': 'Orange', 'genre_ids': 28},
{'label': 'Yellow', 'genre_ids': 9648},
{'label': 'Red', 'genre_ids': 878},
{'label': 'Brown', 'genre_ids': 12},
{'label': 'Black', 'genre_ids': 28},
{'label': 'White', 'genre_ids': 14},
{'label': 'Blue', 'genre_ids': 28},
{'label': 'Light Blue', 'genre_ids': 10751},
{'label': 'Magenta', 'genre_ids': 28},
{'label': 'Gray', 'genre_ids': 28}}
Это мой код:
for values in dictionary_title["genre_ids"]:
for item in values:
if item == 28:
print(values.index(item))
Например, я хочу напечатать index:2,6,8,10,11, которые являются индексами элементов с ключом genre_ids
=28. Как мне это сделать?
enumerate(dictionary_title)
Во-вторых, словари не хранятся в том порядке, в котором они были введены. В словаре нет индекса для элементов (кроме ключей). Вы можете использовать список вместо набора, если хотите сохранить порядок элементов и иметь возможность их индексировать.
Спасибо вам, ребята. Так что я не использую ключ и значения словаря udenrstant... так что Diction_Title есть ключ и значение для каждого элемента, так почему же Diction_Title не является словарем?
Dictionary_title СОДЕРЖИТ словари, но сам является набором. Сравните my_set = {a, b, c}
и my_dict = {a:b, c:d, e:f}
@Elly То, что вы показали в качестве объявления для Dictionary_title, синтаксически ошибочно. Вы используете установленный синтаксис. Однако элементы в наборе должны быть хэшируемыми, а словари хешируемыми не являются. Попробуйте запустить свой собственный код, и вы увидите
Вы можете использовать понимание списка с enumerate
.
dictionary_title=[
{'label': 'Green', 'genre_ids': 878},
{'label': 'Pink', 'genre_ids': 16},
{'label': 'Orange', 'genre_ids': 28},
{'label': 'Yellow', 'genre_ids': 9648},
{'label': 'Red', 'genre_ids': 878},
{'label': 'Brown', 'genre_ids': 12},
{'label': 'Black', 'genre_ids': 28},
{'label': 'White', 'genre_ids': 14},
{'label': 'Blue', 'genre_ids': 28},
{'label': 'Light Blue', 'genre_ids': 10751},
{'label': 'Magenta', 'genre_ids': 28},
{'label': 'Gray', 'genre_ids': 28}]
res = [i for i, o in enumerate(dictionary_title) if o['genre_ids'] == 28]
print(res)
спасибо, парень, но у меня есть эта ошибка: res = [i for i, o in enumerate (dictionary_title) if o ['genre_ids'] == 28] TypeError: индексы строк должны быть целыми числами, а не 'str'
Вы, должно быть, сделали опечатку; попробуйте скопировать ответ @Unmitigated.
@Elly Код в моем ответе работает. Посмотреть в действии здесь. В вашем коде может быть ошибка.
"заголовок словаря" должен быть списком!!! Я оставляю вам код, как это сделать :-)
dictionary_title=[
{'label': 'Green', 'genre_ids': 878},
{'label': 'Pink', 'genre_ids': 16},
{'label': 'Orange', 'genre_ids': 28},
{'label': 'Yellow', 'genre_ids': 9648},
{'label': 'Red', 'genre_ids': 878},
{'label': 'Brown', 'genre_ids': 12},
{'label': 'Black', 'genre_ids': 28},
{'label': 'White', 'genre_ids': 14},
{'label': 'Blue', 'genre_ids': 28},
{'label': 'Light Blue', 'genre_ids': 10751},
{'label': 'Magenta', 'genre_ids': 28},
{'label': 'Gray', 'genre_ids': 28}]
for idx in range(0, len(dictionary_title)):
if dictionary_title[idx]["genre_ids"] == 28:
print(idx)
Вы также можете сделать это, используя различные стили цикла.
Стиль 2: Цикл с использованием enumerate()
for enumerate_item in enumerate(dictionary_title):
if enumerate_item[1]["genre_ids"] == 28:
print(enumerate_item[0])
Стиль 3: Цикл с использованием enumerate() только другим способом...
for idx, dict in enumerate(dictionary_title):
if dict['genre_ids'] == 28:
print(idx)
Стиль 4: Цикл с использованием понимания списка
rest = [enumerate_item[0] for enumerate_item in enumerate(dictionary_title) if enumerate_item[1]['genre_ids'] == 28]
print(rest)
Стиль 5: Цикл, использующий понимание списка, только другим способом...
rest = [(idx) for idx, dict in enumerate(dictionary_title) if dict['genre_ids'] == 28]
print(rest)
Ваш объект верхнего уровня
dictionary_title
— это не словарь, это набор.