Kla*_*aas 1 python sorting dictionary
因此,如果项目值相同,我想按值对字典进行排序并按字母顺序维护以防止出现联系。但是,python字典没有按字母顺序保存数据,如何解决?先感谢您!
这是我的代码:
from collections import Counter
test = "betty bought a bit of butter but the butter was bitter"
Counter(test.split()).most_common(3)
Run Code Online (Sandbox Code Playgroud)
输出:
[('butter', 2), ('a', 1), ('bitter', 1)]
Run Code Online (Sandbox Code Playgroud)
所需的输出应该是:
[('butter', 2), ('a', 1), ('betty', 1)]
Run Code Online (Sandbox Code Playgroud)
因为“苦味”应该按字母顺序排在“贝蒂”之后。
使用带有自定义键的heapq.nsmallest()函数,传入负数以反转该部分的排序,并按字母顺序返回键本身:
import heapq
top3 = heapq.nsmallest(
3, Counter(test.split()).items(),
key=lambda kv: (-kv[1], kv[0]))
Run Code Online (Sandbox Code Playgroud)
该Counter.most_common()方法heapq.nlargest()在您给它一个小于字典中键数的参数时使用,并且只使用计数来确定顺序,因此在平局的情况下,顺序是任意的。以上是您特定排序顺序的等效项。就像Counter.most_common(),这是一个 O(NlogK) 解决方案(N 是计数的项目数,K 是您想要输出的项目数)。
演示:
>>> import heapq
>>> from collections import Counter
>>> test = "betty bought a bit of butter but the butter was bitter"
>>> heapq.nsmallest(3, Counter(test.split()).items(), key=lambda kv: (-kv[1], kv[0]))
[('butter', 2), ('a', 1), ('betty', 1)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |