我正在尝试使用计数器按出现次数对字母进行排序,并将任何具有相同频率的字母按字母顺序排序,但我无法访问它生成的字典的值。
letter_count = collections.Counter("alphabet")
print(letter_count)
产生:
Counter({'a': 2, 'l': 1, 't': 1, 'p': 1, 'h': 1, 'e': 1, 'b': 1})
如何按照频率和字母顺序排序,以便只出现一次的所有内容都按字母顺序排列?请保留HTML标签。
我正在尝试使用计数器按出现次数对字母进行排序,并将任何具有相同频率的字母按字母顺序排序,但我无法访问它生成的字典的值。
letter_count = collections.Counter("alphabet")
print(letter_count)
产生:
Counter({'a': 2, 'l': 1, 't': 1, 'p': 1, 'h': 1, 'e': 1, 'b': 1})
>>> a = sorted(letter_count.items(), key=lambda item: (-item[1], item[0]))
>>> print(a)
# [('a', 2), ('b', 1), ('e', 1), ('h', 1), ('l', 1), ('p', 1), ('t', 1)]
collections.OrderedDict
:>>> collections.OrderedDict(a)
# OrderedDict([('a', 2),
# ('b', 1),
# ('e', 1),
# ('h', 1),
# ('l', 1),
# ('p', 1),
# ('t', 1)])
'a'
首先出现是因为它最常见。其他所有内容按字母顺序排序。在将输入传递给计数器之前,您可以对其进行排序。
>>> Counter(sorted("alphabet")).most_common()
[('a', 2), ('b', 1), ('e', 1), ('h', 1), ('l', 1), ('p', 1), ('t', 1)]
letter_count = collections.Counter("alphabet")
the_letters = [a for a, b in letter_count.items() if b == 1]
letters.sort()
print("letters that occur only once:")
for i in the_letters:
print(i)
这段代码使用列表推导式创建了一个仅包含出现一次的所有字母的列表,然后将它们全部打印出来。items() 返回一个键值对,可以用来确定一个键的值是否等于1。
letter_count = collections.Counter("alphabet")
single_occurrences = sorted([letter for letter, occurrence in letter_count.items() if occurrence == 1])
print(single_occurrences)
# prints: ['b', 'e', 'h', 'l', 'p', 't']
lambda item: (-item[1], item[0]
它的确切作用是什么? - kirti purohitreverse
)。对于配对(item[1],item[0])
,首先按item[1]
排序,然后,如果项目在item[1]
上相等,则按item[0]
排序。这里的item[1]
是频率,而item[0]
是字符符号。 - taciturno