#python #list #dictionary #for-loop
Вопрос:
Если входные данные представляют собой список, он работает правильно
list_data = [7,10,9,20,2,5,15,6,25,2,8,17,23,9,24,45,3,22,6,20,4]
pos_1 = 0
pos_2 = 0
for i in range(len(list_data)):
if list_data[i] >= 25:
pos_1 = i
break
print(f"Position1 which has value greater than equal to 25: {pos_1}")
for i in range(pos_1 1,len(list_data)):
if list_data[i] >= 25:
pos_2 = i
break
print(f"Position2 which has value greater than equal to 25: {pos_2}")
Вывод (2-й цикл для не будет повторять 1-й цикл для)
Position1 which has value greater than equal to 25: 8
Position2 which has value greater than equal to 25: 15
Но если данные представляют собой такой словарь, как этот
dic_data = {1: 10, 3: 20, 6: 15, 8: 25, 11: 17, 12: 23, 14: 24, 15: 45, 17: 22, 19: 20}
index_1 = 0
for i in range(len(dic_data)):
if(dic_data.values() >= 25):
pos_1 = dic_data.keys()
index_1 = i
break
print(f"Position1 which has value greater than equal to 25: {pos_1}")
for i in range(index_1 1,len(dic_data)):
if(dic_data.values() >= 25):
pos_2 = dic_data.keys()
break
print(f"Position2 which has value greater than equal to 25: {pos_2}")
Конечно, это должно быть ошибкой
Как работать с данными словаря? (оба они не являются моим фактическим кодом, это просто пример)
Комментарии:
1. С помощью диктанта, что представляет собой ключ и значение в отношении вашего первого кода ? Если значение больше 25, сохраните ключ ?
2. Что вы имеете в виду, говоря «Конечно, это должно быть ошибкой»? Вы не сказали нам, каков результат второго блока кода. Я бы рекомендовал вам распечатать различные условия и функции для диктовок, чтобы вы могли видеть, что они делают. Потому что я не думаю, что этот код делает то, что вы хотите.
3. Извините всех за мои неясные вопросы.
Ответ №1:
Вы можете использовать переменную итератора с функцией enumerate() :
dic_data = {1: 10, 3: 20, 6: 15, 8: 25, 11: 17, 12: 23,
14: 24, 15: 45, 17: 22, 19: 20}
iData = enumerate(dic_data.values()) # or iter(dic_data.items()) to get keys
for i,value in iData:
if (value >= 25):
pos_1 = i
break
print(f"Position1 which has value greater than equal to 25: {pos_1}")
for i,value in iData:
if(value >= 25):
pos_2 = i
break
print(f"Position2 which has value greater than equal to 25: {pos_2}")
выход:
Position1 which has value greater than equal to 25: 3
Position2 which has value greater than equal to 25: 7
Обратите внимание, что вы не можете получить доступ к словарю по позиционному индексу, поэтому вывод имеет ограниченное практическое применение
Комментарии:
1. Вы правы, изначально у меня там был dic_data.keys (), я не понимал, что iter() больше не нужен, когда переключил его на индексы возвращаемых значений. Я исправил ответ, спасибо.
Ответ №2:
.keys()
И .values()
представляет собой весь список ключей или значений, вы ничего не можете сделать с ним в отношении сравнения или индекса. Вам нужно выполнить итерацию по парам дикта : items
dic_data = {1: 10, 3: 20, 6: 15, 8: 25, 11: 17, 12: 23, 14: 24, 15: 45, 17: 22, 19: 20}
index_1, pos_1, pos_2 = 0, 0, 0
for idx, (k, v) in enumerate(dic_data.items()):
if v >= 25:
pos_1 = k
index_1 = idx
break
print(f"Position1 which has value greater than equal to 25: {pos_1}")
for idx, (k, v) in enumerate(list(dic_data.items())[index_1 1:]):
if v >= 25:
pos_2 = k
break
print(f"Position2 which has value greater than equal to 25: {pos_2}")
Position1 which has value greater than equal to 25: 8
Position2 which has value greater than equal to 25: 15
Ответ №3:
Это мое решение проблемы. Я избавился от большей части лишнего кода.
ps: Я добавил переменную, которая отображает значения позиций ( first_ value
и second_value
) на случай, если вы захотите проверить правильность ответа.
dic_data = {1: 10, 3: 20, 6: 15, 8: 25, 11: 17, 12: 23, 14: 24, 15: 45, 17: 22, 19: 20}
extra_list = list(dic_data.values())
for i in extra_list:
if(i >= 25):
pos_1 = extra_list.index(i)
first_value = i
break
print(f"Position1 which has value greater than equal to 25: {pos_1}.The value in that position is {first_value}")
for i in extra_list[pos_1 1:]:
if(i >= 25):
pos_2 = extra_list.index(i)
second_value = i
break
print(f"Position2 which has value greater than equal to 25: {pos_2}. The value in that position is {second_value}.")
Я создал функцию, которая должна помочь сэкономить время
def greater_equal_25(list1, pos = 0):
'''based on your needs use the value or key methods on the dictionary and then
create a variable that has the list of the method using the list function'''
if pos == 0:
for i in list1[pos:]:
if (i >= 25):
posx = extra_list.index(i)
second_value = i
break
else:
for i in list1[pos 1:]:
if (i >= 25):
posx= extra_list.index(i)
second_value = i
break
return posx