首页 > 解决方案 > 在字典中排序

问题描述

我试图从我的字典中获取输出,以便从它们的值而不是键中排序

问题:

接受列表作为参数的 ValueCount。您的函数将返回一个元组列表。每个元组将包含一个值以及该值在列表中出现的次数

期望的结果

>>> data = [1,2,3,1,2,3,5,5,4]
    >>> ValueCount(data)
            [(1, 2), (2, 2), (5, 1), (4, 1)]

我的代码和结果

def CountValues(data):
    dict1 = {}
    for number in data:
        if number not in dict1:
            dict1[number] = 1
        else: 
            dict1[number] += 1
    tuple_data = dict1.items()
    lst = sorted(tuple_data)
    return(lst)

>>>[(1, 2), (2, 2), (3, 2), (4, 1), (5, 2)]

我将如何使用值而不是键对它进行升序排序。

标签: pythonpython-3.x

解决方案


如果要按值排序(每个元组中的第二项),请指定key

sorted(tuple_data, key=lambda x: x[1])

或与operator.itemgetter

sorted(tuple_data, key=operator.itemgetter(1))

另外作为旁注,您的计数代码:

dict1 = {}
for number in data:
    if number not in dict1:
        dict1[number] = 1
    else: 
        dict1[number] += 1

可以简化为collections.Counter

dict1 = collections.Counter(data)

考虑到以上所有因素,您的代码可能如下所示:

from operator import itemgetter
from collections import Counter

def CountValues(data):
    counts = Counter(data)
    return sorted(counts.items(), key=itemgetter(1))

print(CountValues([1,2,3,1,2,3,5,5,4]))
# [(4, 1), (1, 2), (2, 2), (3, 2), (5, 2)]

推荐阅读