字典排序中的错误

问题描述 投票:0回答:1

这是我的代码,用来查找并打印给定数据中得分第二低的学生的数值。

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
python sorting dictionary tuples key-value
1个回答
0
投票

这个怎么样? 将分数集(即所有的唯一值)进行排序,然后找到第二低的分数。 返回该分数的学生的名字。

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']

0
投票
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] 会给你第二低的分数。

当把理解放在一起列表时,会给你第二低的名字。


0
投票

这就是你可以找到第二低分学生的方法。

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)

0
投票

我建议按分数排序,然后打印出排序数组中第二个元素的名字。

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))
© www.soinside.com 2019 - 2024. All rights reserved.