我正在尝试制作一个根据给定数据找到最低温度的程序。 这是我到目前为止的程序,但它给出了随机结果 - 有时是最大值,有时是最小值。有人可以帮我解决一下。
d = {}
for i in range(5):
user = input("Enter city followed by temperature > ")
if(user!='stop'):
data = user.split()
d[data[0]]=int(data[1])
else:
break
alist=[]
for k,v in d.items():
alist.append((v,k))
alist.sort()
t=alist[0]
print("The coldest city is:",t[1],t[0])
print(d)
break
答案 0 :(得分:0)
我认为您的问题是,在将数据导入字典结构后,您将其作为元组附加到列表中并尝试对元组进行排序。按值对字典进行排序要容易得多。试试这个。
d = {}
for i in range(5):
user = input("Enter city followed by temperature > ")
if(user!='stop'):
data = user.split()
d[data[0]]=int(data[1])
else:
break
#Get an ordered list of tuples sorted by the temp
d_sorted = sorted(d.items(), key=lambda x: x[1])
coldest = d_sorted[0]
print("The coldest city is:",coldest[0],coldest[1])
答案 1 :(得分:0)
字典中的项目是无序的。他们的订单可能会在不同运行中发生变化但是您的代码(以for k,v in d.items():
开头)获取d.items()
返回的第一个值,将其添加到列表中,对单一迭代列表进行排序,获取第一个且唯一的值从列表中打印并打破循环。
您可以使用min()
功能来查找最冷的城市:
coldest_city = min(d, key=d.get) # find minimum in a dictionary by value
print("The coldest city is:", coldest_city, d[coldest_city])
如果你不能使用for
函数,你可以使用一个简单的min()
- 循环来查找对应于字典中最小值的键:
it = iter(d.items()) # get an iterator over (key, value) pairs of the dictionary
minkey, minvalue = next(it) # assume dictionary is not empty
for key, value in it:
if minvalue > value:
minkey, minvalue = key, value
print("The coldest city is:", minkey, minvalue)
如果最低温度出现在一个以上的城市,那么它们中的任何一个都可能被选为最冷的城市。