Python 按频率对字符串列表(URL';s)排序并删除重复项
我已经给出了一个包含网站URL的列表。如果元素具有相同的频率,则按字典顺序对它们进行排序,而不导入任何额外的库或包Python 按频率对字符串列表(URL';s)排序并删除重复项,python,algorithm,dictionary,data-structures,Python,Algorithm,Dictionary,Data Structures,我已经给出了一个包含网站URL的列表。如果元素具有相同的频率,则按字典顺序对它们进行排序,而不导入任何额外的库或包 def solve(S,N): #在这里编写代码 n=长(S) dict={} 对于S中的i: 如果我在dict中: dict[i]+=1 其他: dict[i]=0 返回指令 我尝试过这样做,但频率相同的元素会按照输入的相同顺序打印。问题是,您从未对字典进行排序,甚至没有按频率排序 计算字典中的出现次数是很常见的,因此在标准库中有一个名为的方便类,这使计算变得简单得多。如果出于
def solve(S,N):
#在这里编写代码
n=长(S)
dict={}
对于S中的i:
如果我在dict中:
dict[i]+=1
其他:
dict[i]=0
返回指令
我尝试过这样做,但频率相同的元素会按照输入的相同顺序打印。问题是,您从未对字典进行排序,甚至没有按频率排序 计算字典中的出现次数是很常见的,因此在标准库中有一个名为的方便类,这使计算变得简单得多。如果出于您的目的,标准库算作“额外”库,那么您可以使用原始循环来构建字典;重要的部分是在你计算了频率之后如何对其进行排序
从集合导入计数器
按频率排列的def订单(URL):
计数=计数器(URL)
返回排序(计数,键=lambda url:(-counts[url],url))
key函数返回一个元组,这样当两个url具有相同的频率时,url
字符串将用作一个断开连接的字符串。-
符号表示它们首先以最高频率排序;如果您希望先使用最低频率,只需删除-
即可使用排序()
按值排序,而不是按键排序
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]}')
在OP中没有导入任何额外的库或包,您就错过了。
集合
是标准库的一部分;无需安装任何额外的库或包即可使用。我的回答针对的是不允许收集的情况。