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



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

def solve (S, N):
# write your code here
n = len(S)
dict = {}
for i in S:
if i in dict:
dict[i]+=1
else:
dict[i]=0
return dict

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

您可以使用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]}')

问题是你从来没有对字典进行排序,甚至没有按频率排序。

计算字典中的出现次数很常见,因此标准库中有一个名为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字符串用作仲裁。-符号表示它们首先以最高频率排序;如果您首先想要最低频率,只需删除-即可。

最新更新