python - 如何先根据键对元组元素进行排序,然后根据值对元组元素进行排序

标签 python tuples

<分区>

如何在 python 中对元素元组进行排序,首先根据值,然后根据键。考虑我将用户输入作为字符串的程序。我想找出每个字符的数量并打印字符串中最常见的 3 个字符。

#input string
strr=list(raw_input())
count=dict()

#store the count of each character in dictionary
for i in range(len(strr)):
count[strr[i]]=count.get(strr[i],0)+1

#hence we can't perform sorting on dict so convert it into tuple 
temp=list()
t=count.items()

for (k,v) in t:
    temp.append((v,k))

temp.sort(reverse=True)

 #print 3 most common element
for (v,k) in temp[:3]:
         print k,v

关于给予 i/p -aabbbccde

以上代码的输出是:

3 b
2 c
2 a

但我希望输出为:

3 b
2 a
2 c

最佳答案

对元组列表进行排序,第一个值按降序排列(reverse=True),第二个值按升序排列(reverse=False,默认情况下)。这是一个 MWE。

lists = [(2, 'c'), (2, 'a'), (3, 'b')]

result = sorted(lists, key=lambda x: (-x[0], x[1])) # -x[0] represents descending order

print(result)
# Output
[(3, 'b'), (2, 'a'), (2, 'c')]

使用起来很简单collections.Counter 计算字符串中每个字母的频率。

import collections

s = 'bcabcab'

# If you don't care the order, just use `most_common`
#most_common = collections.Counter(s).most_common(3)

char_and_frequency = collections.Counter(s)
result = sorted(char_and_frequency.items(), key=lambda x:(-x[1], x[0]))[:3]    # sorted by x[1] in descending order, x[0] in ascending order

print(result)
# Output
[('b', 3), ('a', 2), ('c', 2)]

关于python - 如何先根据键对元组元素进行排序,然后根据值对元组元素进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37513551/

相关文章:

python - 在 python 与 gnuplot 中将数据拟合到方程

python - 根据列表中的元素向 Outlook 电子邮件添加多个附件

python - 对 numpy 数组中存在的元组中的列进行切片

c++ - 如何删除元组初始化 vector 中的样板?

python - python中的异常错误处理在指定不执行后吐出错误

python - 我怎样才能有效地判断一个索引是否是一个完整的笛卡尔积

python - 如何向数据行添加标题属性?

python - 打印两个元组之间的差异

Python:从列表列表中删除元组

python - Python中元组的循环移动平均线