按频率对字符串列表(URL)进行排序并删除重复项

时间:2019-12-16 05:48:35

标签: python algorithm dictionary data-structures

我给出了一个包含网站URL的列表。如果元素具有相同的频率,请按字典顺序对其进行排序,而无需导入任何其他库或包。

<Annotations items={store}/>

我尝试这样做,但是具有相同频率的元素以与输入相同的顺序打印。

2 个答案:

答案 0 :(得分:1)

问题在于,您从未对字典进行排序,甚至没有按频率排序。

对字典中的出现次数进行计数是很常见的,因此标准库中有一个方便的类,名为collections.Counter,这使此过程变得更加简单。如果标准库出于您的目的算作“额外”库,那么您可以使用原始循环来构建字典;重要的部分是在计算频率后如何对其进行排序。

from collections import Counter

def order_by_frequency(urls):
    counts = Counter(urls)
    return sorted(counts, key=lambda url: (-counts[url], url))

key函数返回一个元组,因此当两个URL具有相同的频率时,url字符串将用作平局决胜局。 -符号表示它们首先以最高频率进行排序;如果您要首先获得最低的频率,只需移除-

答案 1 :(得分:1)

您可以使用sorted()来按值和键进行排序

data = solve(S, N)
sorted_data = sorted(data.items(), key=lambda x: [-x[1], x[0]])

for sd in sorted_data:
    print(f'{sd[0]}: {sd[1]}')