Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中按字母顺序然后按值顺序对计数器排序_Python_Sorting_Counter - Fatal编程技术网

如何在Python中按字母顺序然后按值顺序对计数器排序

如何在Python中按字母顺序然后按值顺序对计数器排序,python,sorting,counter,Python,Sorting,Counter,我有一个计数器,我想按以下方式排序: Counter({'M': 9, 'L': 5, 'P': 5, 'S': 2, 'd': 1, 'T': 1}) 当我使用我的代码时,它给了我: Counter({'M': 9, 'P': 5, 'L': 5, 'S': 2, 'T': 1, 'd': 1}) 我尝试了sorted()函数,但当我使用它时,它的返回值不再是计数器 这是我的密码,你会怎么做 def most_encountered_letters(dictionnary): co

我有一个计数器,我想按以下方式排序:

Counter({'M': 9, 'L': 5, 'P': 5, 'S': 2, 'd': 1, 'T': 1})
当我使用我的代码时,它给了我:

Counter({'M': 9, 'P': 5, 'L': 5, 'S': 2, 'T': 1, 'd': 1})
我尝试了sorted()函数,但当我使用它时,它的返回值不再是计数器

这是我的密码,你会怎么做

def most_encountered_letters(dictionnary):
    counter = collections.Counter()
    for line in dictionnary:
        words = line.split(',')[0].split(' ')
        for word in words:
            counter[word[0]] += 1

    print(counter)                                                                                                        
    return counter.most_common(5)

计数器
无序。它们是
dict
的一个子类,与
dict
一样,没有顺序。说“已排序的
计数器
”没有意义。您可以在
计数器
中按所需方式获得项目列表,例如:

>>> from collections import Counter
>>> c = Counter({'M': 9, 'L': 5, 'P': 5, 'S': 2, 'd': 1, 'T': 1})
>>> c
Counter({'M': 9, 'L': 5, 'P': 5, 'S': 2, 'T': 1, 'd': 1})
>>> sorted(c.items(), key= lambda t: (t[1], t[0]), reverse=True)
[('M', 9), ('P', 5), ('L', 5), ('S', 2), ('d', 1), ('T', 1)]
如果您想要有序的
映射
类型,则必须使用内置的
orderedict
,或者实现自己的映射。我们可以使用多重继承来重用内置类以获得我们想要的。这是一个食谱:

因此,在行动中:

>>> oc = OrderedCounter()
>>> for k,v in sorted(c.items(), key= lambda t: (t[1], t[0]), reverse=True):
...     oc[k] = v
...
>>> oc
OrderedCounter(OrderedDict([('M', 9), ('P', 5), ('L', 5), ('S', 2), ('d', 1), ('T', 1)]))
>>> for k,v in oc.items():
...   print(k,v)
...
M 9
P 5
L 5
S 2
d 1
T 1
>>>

更重要的是,你应该考虑为什么你需要一个命令<代码>计数器< /代码>…您真的需要吗?

计数器无序。它们是
dict
的一个子类,与
dict
一样,没有顺序。说“已排序的
计数器
”没有意义。您可以在
计数器
中按所需方式获得项目列表,例如:

>>> from collections import Counter
>>> c = Counter({'M': 9, 'L': 5, 'P': 5, 'S': 2, 'd': 1, 'T': 1})
>>> c
Counter({'M': 9, 'L': 5, 'P': 5, 'S': 2, 'T': 1, 'd': 1})
>>> sorted(c.items(), key= lambda t: (t[1], t[0]), reverse=True)
[('M', 9), ('P', 5), ('L', 5), ('S', 2), ('d', 1), ('T', 1)]
如果您想要有序的
映射
类型,则必须使用内置的
orderedict
,或者实现自己的映射。我们可以使用多重继承来重用内置类以获得我们想要的。这是一个食谱:

因此,在行动中:

>>> oc = OrderedCounter()
>>> for k,v in sorted(c.items(), key= lambda t: (t[1], t[0]), reverse=True):
...     oc[k] = v
...
>>> oc
OrderedCounter(OrderedDict([('M', 9), ('P', 5), ('L', 5), ('S', 2), ('d', 1), ('T', 1)]))
>>> for k,v in oc.items():
...   print(k,v)
...
M 9
P 5
L 5
S 2
d 1
T 1
>>>

更重要的是,你应该考虑为什么你需要一个命令<代码>计数器< /代码>…你真的需要一个吗?

A
Counter
是一个
Dict
子类,因此根据定义它是未排序的,如果你试图使用
sorted()
它必须返回一个非
Dict
类。您可以将结果移动到一个列表中。我想,但我的问题是“您为什么要排序?”,因为您的实际问题最好用另一种方式解决。最后,这是我的建议。顺便说一句,Python2.x还是3.x?在Python中,排序
Dict
是没有办法的,唯一的办法就是仔细查看链接!你的“没有答案”彻底改变了你的问题,并使两个答案无效。还有,你的标题。你的标题说你想先按键排序,然后按值排序,但听起来你实际上想先按值排序,然后按键排序,这是相反的。
计数器
是一个
Dict
子类,因此根据定义它是未排序的,如果你试图使用
sorted()
它必须返回一个非
Dict
类。您可以将结果移动到一个列表中。我想,但我的问题是“您为什么要排序?”,因为您的实际问题最好用另一种方式解决。最后,这是我的建议。顺便说一句,Python2.x还是3.x?在Python中,排序
Dict
是没有办法的,唯一的办法就是仔细查看链接!你的“没有答案”彻底改变了你的问题,并使两个答案无效。还有,你的标题。你的标题说你想先按键排序,然后按值排序,但听起来你实际上想先按值排序,然后按键排序,这是相反的。