2013-11-14 95 views
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 
+2

请缩进您的代码... – jbat100

+0

如果您可以将您的代码格式化得更好一些,那么它将大大地帮助我们。 – andrewgrz

+3

我缩进了前几行(我可以确定的那些)来正确格式化代码。请修复您的其他代码。您可以将代码粘贴到编辑器中,选择所有代码,然后单击工具栏上的“{}”按钮以使其格式正确。 –

回答

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]) 
+0

这是很容易,那么我想要做什么 – rggod

+0

是否有可能得到一个基于他们的降温 – rggod

+0

@ user2994135城市的清单当然。你得到d_sorted后,只需添加这一行: d_sorted_decreasing = d_sorted.reverse() 这将给你的元组列表递减。 –

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 -loop,找到,如果你可以”对应于一个极小值在字典中的关键如果在一个以上的城市然后它们中的任何可以被选择为最冷城市发生的最低温度

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) 

:吨使用min()功能。

+0

我不能使用min()函数只有字典,为什么它对我来说更加复杂 – rggod

+0

@ user2994135:我添加了不使用'min()'的解决方案。 – jfs

相关问题