Python 函数以最小可能的时间顺序 (O(n)) 在字典中查找所有第二低的 SCORERS
Python function to find ALL second lowest SCORERS in a Dictionary with minimal possible order of time (O(n))
你好,我想写一个 python 函数来查找字典中所有得分最低的人,时间复杂度为 o(n)。
该函数应处理任何字典索引中的第二小值,包括前 k,v 对。
函数也应该处理重复的最低分数。
测试用例:
second_lowest_scorers({"hri":6.2,"dav":1.1,"asv":1.1,"wrs":12.3,"dup":6.2,"awe":43.2,"asw":22.2,"asd":6.2})
预期输出:
['asd', 'dup', 'hri'] (optional: sorted by name)
解释 asv 和 dav 得分为 1.1,这是最低分。 asd、dup、hri 得分次低。
到目前为止,我已经使用多个循环解决了它。
def lowest_scores(names_scores):
lowest_score=min(names_scores.values())
lowscorers=[]
low_scorer_dict = { k : v for k,v in names_scores.items() if v != lowest_score}
second_lowest_score = min(low_scorer_dict.values())
for k,v in low_scorer_dict.items():
if v == second_lowest_score:
lowscorers.append(k)
return sorted(lowscorers)
不想使用外部函数来解决算法问题
O(N) 解
data = {"hri":6.2,"dav":1.1,"asv":1.1,"wrs":12.3,"dup":6.2,"awe":43.2,"asw":22.2,"asd":6.2}
vals = set(data.values()) # create set so we don't get duplicates
vals.remove(min(vals)) # remove the most minimum
minVal = min(vals) # this is the second minimum
for k,v in data.items():
if v == minVal :
print(k) # where value is second minimum
hri
dup
asd
你好,我想写一个 python 函数来查找字典中所有得分最低的人,时间复杂度为 o(n)。
该函数应处理任何字典索引中的第二小值,包括前 k,v 对。
函数也应该处理重复的最低分数。
测试用例:
second_lowest_scorers({"hri":6.2,"dav":1.1,"asv":1.1,"wrs":12.3,"dup":6.2,"awe":43.2,"asw":22.2,"asd":6.2})
预期输出:
['asd', 'dup', 'hri'] (optional: sorted by name)
解释 asv 和 dav 得分为 1.1,这是最低分。 asd、dup、hri 得分次低。
到目前为止,我已经使用多个循环解决了它。
def lowest_scores(names_scores):
lowest_score=min(names_scores.values())
lowscorers=[]
low_scorer_dict = { k : v for k,v in names_scores.items() if v != lowest_score}
second_lowest_score = min(low_scorer_dict.values())
for k,v in low_scorer_dict.items():
if v == second_lowest_score:
lowscorers.append(k)
return sorted(lowscorers)
不想使用外部函数来解决算法问题
O(N) 解
data = {"hri":6.2,"dav":1.1,"asv":1.1,"wrs":12.3,"dup":6.2,"awe":43.2,"asw":22.2,"asd":6.2}
vals = set(data.values()) # create set so we don't get duplicates
vals.remove(min(vals)) # remove the most minimum
minVal = min(vals) # this is the second minimum
for k,v in data.items():
if v == minVal :
print(k) # where value is second minimum
hri
dup
asd