Как обратиться к нулевому значению переменной если она объект 'dict_values'
Код:
speed_of_starships = {'CR90 corvette': '950', 'Star Destroyer': '975', 'Sentinel-class landing craft': '1000', 'Death Star': 'n/a'}
for i in speed_of_starships.values(), speed_of_starships:
if i[0] == 'n/a':
del speed_of_starships[i][1]
Ошибка:
TypeError: 'dict_values' object is not subscriptable
Как мне тогда к ней обратиться? Я недавно задавал вопрос как обращаться к нулевому и первому значению. Мне за этот вопрос поставили минус. Я думал что я делал неправильно и из-за этого спросил, но я сделал всё правильно. Он не пытается обращаться в нулевому значению переменной, а пытается обратиться к нулевому элементу нулевого элемента. Ну как минимум я так понимаю.
Ответы (1 шт):
Просто то, что возвращает словарь из .values() не умеет возвращать значения по индексу.
Если хотите пройтись по словарю, сравнивания значения и удалить в нем же, то
- Используйте
.items()- оно будет возвращать кортежи из пар ключ и значение - Сравнивая значение, удаляйте по ключу
- Оберните
.items()в список, чтобы получить копию этого объекта, иначе будет ошибка:RuntimeError: dictionary changed size during iteration, т.к. менять словарь при его итерации запрещено
Пример:
speed_of_starships = {'CR90 corvette': '950', 'Star Destroyer': '975', 'Sentinel-class landing craft': '1000', 'Death Star': 'n/a'}
for k, v in list(speed_of_starships.items()):
if v == 'n/a':
del speed_of_starships[k]
print(speed_of_starships)
# {'CR90 corvette': '950', 'Star Destroyer': '975', 'Sentinel-class landing craft': '1000'}
По аналогии можно перебирать сам словарь, но это будет возвращать его ключи:
for k in list(speed_of_starships):
if speed_of_starships[k] == 'n/a':
del speed_of_starships[k]
Тоже самое:
for k in list(speed_of_starships.keys()):
...
Еще вариант - это сгенерировать новый словарь, в которые не включаем те элементы, что не нужны:
new_speed_of_starships = {
k: v
for k, v in speed_of_starships.items()
if v != 'n/a'
}
print(new_speed_of_starships)