# Enter your code here. Read input from STDIN. Print output to STDOUT
lst = list()
name_grade = {}
for i in range(int(raw_input())):
name = raw_input()
grade = float(raw_input())
name_grade[name]= grade
tem = list()
for k,v in name_grade.items():
tem.append((v,k))
sorted_list = sorted(tem)
second_low = min(sorted_list[1:])
T = tuple(second_low)
print T[1]
4
PRASHANT
32个
Pallavi
36个
Dheeraj
39个
Shivam
40
预期o / p: Pallavi
5
哈利
37.21
贝瑞
37.21
蒂娜
37.2
Akriti
41个
恶劣
39
浆果
浆果
哈利
答案 0 :(得分:0)
我不是Python专家,但我正在考虑尝试简化事情。例如,我不认为使用字典是必要的,不是因为它只是一个你想要经常做的简单函数。
我只是创建我需要的函数作为lambda函数。实施例
f = lambda: raw_input("INPUT NAME: ")
g = lambda: input("INPUT GRADE: ")
然后我会做这样的事情,定义一个函数,你可以把学生的数量作为一个值(“数字”),这将产生一些可用作输出的东西。在这种情况下,我生成一个嵌套列表。
seq = []
def names_grade(number):
seq = []
for i in range(number):
seq.append([g(),f()])
return seq
对我而言,输出的格式无关紧要。嵌套列表,即列表中的列表可能是有用的。对于某些事情,列表更好。字典对于其他东西很有用,但对于像这样的简单函数,我会尝试使用最简单的东西,最简单的方法来进行排序等等。 Python中还有其他数据类型,如Sets或whatnot。选择最适合手头问题的类型非常重要。
所以我得到的是这个,在运行之后:
>>> x = names_grade(2)
INPUT GRADE: 30
INPUT NAME: Alex
INPUT GRADE: 40
INPUT NAME: Marc
>>> x
[[30, 'Alex'], [40, 'Marc']]
同样,我不是专家,但是我这样做,定义一个函数给我最小的,在这种情况下只有2个输入,以后总是可以改变..
def smallest(x,y):
if x<y:
return x
else:
return y
然后我问并得到以下内容:
>>> smallest(x[0],x[1])
[30, 'Alex']
这不是一个完整的“解决方案”,它更像是一种查看和分析问题的方法,试图找到最佳解决方案..如果你愿意,我们会做一个概念清单,看看我们需要什么功能什么价值,什么类型的数据/价值等等。然后我们从那里建立。如果它不能在一开始就解决问题并不重要。我们开始逐个构建它,我们测试每一步的所有步骤,以确保它通过。
无论如何,我认为对于这种问题,更具“功能范式”或“风格”可能是有用的。只需定义你需要的函数,作为lambda函数或诸如此类的东西,“最小”函数,你需要的函数,然后你可以使用像“map”这样的东西....
请记住,地图采用以下形式:
r = map(func, seq)
它将函数(“func”)应用于序列的每个项目(“seq”)。因此,一旦你有了某种“names_grade”列表,就可以使用map和你为手头的问题创建的任何函数。然后,您可以在非常少的代码行中完成所有操作。您也可以使用“功能组合”,通常您使用的是单行函数,我发现它更具可读性。添加文档字符串或其他形式的文档,以便在适当的详细程度中描述函数的功能,输入的输入(和输入类型),功能以及产生的输出(以及输出类型)。
最后,这几乎是我在Stackoverflow上回答的第一个问题,所以我希望我没有违反任何规则。请不要对我太苛刻,我只是在这里帮忙,不会因为不知道如何写出正确答案而受到个人攻击。祝大家好日子。
*编辑:我在过去几个小时里一直在考虑这个问题,我想我可能找到了解决方案。只需按等级对元组进行排序,如果两个等级相同,则名称将按字母顺序排列。实施例
>>> names_grades_tuple = [
('alex', 15),
('jane', 20),
('david', 19),
('john', 15),
]
>>> sorted(names_grades_tuple, key=lambda grade: grade[1])
[('alex', 15), ('john', 15), ('david', 19), ('jane', 20)]
我不明白为什么原始程序的结构是这样的。这对我来说似乎相当深奥,几乎是深奥的。在上面给出的示例中,如果您想要第二个,那么只需在排序后的第二个值处进行索引。实施例
>>> sorted_tuples = sorted(names_grades_tuple, key=lambda grade: grade[1])
>>> print sorted_tuples[1]
('john', 15)
这有什么意义吗?我想也许我不太明白这个问题。对不起,如果我浪费了任何人在这里的时间。
**编辑2:使用此参考(参考https://wiki.python.org/moin/HowTo/Sorting),我找到了另一种方法。创建一个类,用名称,等级实例化它然后使用运算符模块。实施例
class Student:
def __init__(self, name, grade):
self.name = name
self.grade = grade
def __repr__(self):
return repr((self.name, self.grade))
student_objects = [
Student('john', 15),
Student('jane', 12),
Student('dave', 10),
]
from operator import attrgetter
>>> sorted(student_objects, key=attrgetter('grade', 'name'))
[('alex', 15), ('john', 15), ('allen', 17), ('jane', 20)]
诀窍在于使用attrgetter,您可以在多个级别上进行排序。在这里,我按年级和名称排序。是不是被问到了什么?