1

我正在尝试制作一个根据给定数据找到最低温度的程序。这是我到目前为止的程序,但它给出了随机结果 - 有时是最大值,有时是最小值。有人可以帮我解决它。

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
4

2 回答 2

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)

如果最低温度出现在多个城市中,则可以选择其中任何一个城市作为最冷城市。

于 2013-11-14T23:07:12.563 回答
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])
于 2013-11-14T22:36:21.057 回答