Словари и почему я печатаю каждый результат

Поэтому я написал фрагмент кода, чтобы обнаружить самую низкую температуру в городе в зависимости от того, каким был вход, моя проблема прямо сейчас заключается в том, что я получаю каждый отдельный результат от каждого процесса цикла. Поэтому вместо одного окончательного заявления о печати с погодой и городом я в конечном итоге

[(-3, 'Toronto')]
The coldest city is: Toronto -3
[(-5, 'Edmonton'), (-3, 'Toronto')]
The coldest city is: Edmonton -5
[(-5, 'Edmonton'), (-4, 'Calgary'), (-3, 'Toronto')]
The coldest city is: Edmonton -5

с моим входом, являющимся Торонто, -3 Эдмонтоном -5, Калгари -4

Это мой код

dic = {}
for i in range(5):
 city = input("Enter city followed by temperature >")
 if (city != "stop"): 
 info = city.split()
 dic[info[0]] = int(info[1])
 elif city == "stop":
 break
print(dic) 
alist=[] 
for k,v in dic.items(): 
 alist.append((v,k)) 
 alist.sort() 
 print(alist)
 temp = alist[0]
 print("The coldest city is:",temp[1], temp[0])
3 ответа

Переместите все, кроме append вне цикла, чтобы он выполнялся только один раз, после того, как все данные находятся внутри alist:

for k,v in dic.items(): 
 alist.append((v,k)) 
alist.sort() 
print(alist)
temp = alist[0]
print("The coldest city is:",temp[1], temp[0])


Сначала необходимо добавить все элементы, а затем применить сортировку:

alist=[] 
for k,v in dic.items():
 alist.append((v,k)) 
alist.sort() 
print(alist)
temp = alist[0]
print("The coldest city is:",temp[1], temp[0])

Или более короткой версией будет использование min, это займет время O(N) (нет необходимости в сортировке).

min(dic, key=dic.get) #Returns the key with smallest value
min(dic.items(), key = lambda x:x[1]) #return key, value pair


Зачем вам нужен dict? list или set могут иметь смысл

cities = []
for i in range(5):
 city = input("Enter city followed by temperature >")
 if city == "stop":
 break
 info = city.split()
 cities.append((int(info[1]), info[0]))

print("The coldest city is: {} {}".format(*min(cities)))

licensed under cc by-sa 3.0 with attribution.