在Python中,按值的降序和键的升序对字典进行排序
我的任务是提取字符串中的所有唯一字符(不包括空格),并根据给定字符在字符串中的出现量对其进行排序(因此按降序排序),如果是连字号,则按其ASCII码进行排序 例如: 输入:“我是一只猫” 输出:“aIcmt” 我特别面临的问题是,如果我使用这行代码进行排序:在Python中,按值的降序和键的升序对字典进行排序,python,Python,我的任务是提取字符串中的所有唯一字符(不包括空格),并根据给定字符在字符串中的出现量对其进行排序(因此按降序排序),如果是连字号,则按其ASCII码进行排序 例如: 输入:“我是一只猫” 输出:“aIcmt” 我特别面临的问题是,如果我使用这行代码进行排序: char\u list=sorted(char\u dict.items(),key=lambda x:(x[1],ord(x[0])),reverse=True) 它甚至对字典中的ord(x[0])部分进行反向排序,虽然我只想对字符出现的
char\u list=sorted(char\u dict.items(),key=lambda x:(x[1],ord(x[0])),reverse=True)
它甚至对字典中的ord(x[0])
部分进行反向排序,虽然我只想对字符出现的值进行排序
以下是我的代码供参考:
string_list = [char for char in string]
string_list = [char for char in string_list if char != ' ']
print(string_list)
char_dict = {}
for char in string_list:
if char not in char_dict:
char_dict[char] = 0
else:
char_dict[char] += 1
char_list = sorted(char_dict.items(), key = lambda x: (x[1],ord(x[0])), reverse = True)
print(char_list)
for i in char_list:
print(i[0], end = '')
获取一个iterable(字符串是iterable的,在迭代时每次返回一个字符),并返回一个类似字典的对象,您可以使用most\u common
from collections import Counter
counter = Counter(string)
print(''.join(x[0] for x in counter.most_common()))
编辑:
正如疯狂的物理学家所说,要将空间排除在计数之外,你们可以将一个生成器传递给计数器
counter = Counter(c for c in string if c != ' ')
你可以不使用字典就完成这项任务吗?如果是,您可以尝试以下方法:对每个字母使用计数器,让他们检查字符串中没有空格的字符,向匹配的字母添加一个计数器(使用开关),然后用“”组成一个字符串,让他们添加计数器数超过0的字母(您可以对计数器的int值进行排序,以便按顺序进行排序,也可以在添加字母的位置之前进行检查,排序可能更容易),然后您将得到您想要的。您可以尝试组合使用
计数器
,排序
,以及加入
from collections import Counter
input_str = 'I am a cat'
# use counter to get count of each character including white space
t = list(Counter(input_str).most_common())
# sort on count on reverse and ascii on ascending when ties
t = sorted(t, key=lambda i: (-i[1], i[0]))
# exclude white space and join remaining sorted characters
res = ''.join(i[0] for i in t if i[0] != ' ')
print(res)
输出:
aIcmt
计数器(如果c!='',则c代表字符串中的c)
这是如何处理计数的关系的?从OP开始,如果是关系,则按其ASCII码对其进行排序
@student,因为计数器
是Python 3.6以后的dict
的子类,它将返回字符串中首先出现的字符,然后是出现相同数目的任何其他字符time@student你是科瑞我还没有完全回答你为什么不使用字典这个问题?没有理由不使用,但是如果你没有理由使用,这是一种不用它的方法。你得到了它,我只是用你的(-x[1],x[0])替换了我的(x[1],ord(x[0]),reverse=True
。我不知道我可以用负号反向排序。谢谢。