使用字典查找城市中的最低温度

时间:2013-11-14 22:20:51

标签: python python-3.x dictionary

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

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

2 个答案:

答案 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)

如果最低温度出现在一个以上的城市,那么它们中的任何一个都可能被选为最冷的城市。