这是我的代码,用来查找并打印给定数据中得分第二低的学生的数值。
room =dict()
for _ in range(int(input())):
name = input()
score = float(input())
room.update({name:score})
lowest= min(room.values())
second_lowest = None
for k,v in sorted(room.items(),reverse=True):
if v == lowest: continue
elif second_lowest is None:
second_lowest = v
elif v < second_lowest:
second_lowest = v
if second_lowest==v and second_lowest is not lowest:
print('name',k)
当给定一组特定的输入时,它会返回两个以上的second_lowest key,例如,对于下面的输入,它返回harsh harry和berry,而它不应该返回harsh。但是如果我创建一个单独的 (key, value)
循环往复
sorted(room.items(),reverse=True)
采样输入。
5
Harry
37.21
Berry
37.21
Tina
37.2
Akriti
41
Harsh
39
样本输出:
name Harsh
name Harry
name Berry
这个怎么样? 将分数集(即所有的唯一值)进行排序,然后找到第二低的分数。 返回该分数的学生的名字。
def return_lowest(scores_dict, n_most=2):
unique_scores = sorted(list(set(scores_dict.values())))
score_lowest = unique_scores[n_most-1]
output = [name for name in scores_dict if scores_dict[name] == score_lowest]
return output
In[1]: return_lowest({'Bill':100,'Sally':95,'Fred':75,'Gina':75,'Frank':65})
Out[1]:
['Fred', 'Gina']
second_lowest = sorted(list(set(room.values())))[1]
names = [x for x in room if room[x]==second_lowest]
for name in names:
print(f"name {name}")
解释
[x for x in room]
的键上循环。room
dict。
set(room.values())
将使分数变得独一无二。
sorted(list(set(room.values())))[1]
会给你第二低的分数。
当把理解放在一起列表时,会给你第二低的名字。
这就是你可以找到第二低分学生的方法。
lst = [val for val in room.values() if val != min(list(room.values()))]
for name in room.keys():
if room[name] == min(lst):
print('name',name)
我建议按分数排序,然后打印出排序数组中第二个元素的名字。
room =dict()
for _ in range(int(input())):
name = input()
score = float(input())
room.update({name:score})
second_lowest = sorted(room.values())[1]
print('\n'.join('name: '+ result[0] for result in room.items()
if result[1] == second_lowest))