在字典中排序

2024-09-29 21:40:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着让我的字典的输出按照它们的值而不是键排序

问题:

接受列表作为参数的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)]

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


Tags: 函数innumber列表data参数字典排序
3条回答

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

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

或与^{}一起:

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

另请注意,您的计数代码:

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

可以用^{}简化:

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)]

在关键参数的帮助下,您可以使用排序的。这不是就地分拣。因此,它从不修改原始数组

for more

In [18]:  data = [1,2,3,1,2,3,5,5,4]

In [19]:  from collections import Counter

In [20]: x=Counter(data).items()


#Sorted OUTPUT
In [21]: sorted(list(x), key= lambda i:i[1] )   
Out[21]: [(4, 1), (1, 2), (2, 2), (3, 2), (5, 2)]

In [22]: x
Out[22]: dict_items([(1, 2), (2, 2), (3, 2), (5, 2), (4, 1)])

“Sort”函数使用数据的第一个元素。 要按字典的值对其进行排序,您可以使用for loop for value:

d={1:1,2:2,5:2,4:3,3:2}
x=[]
for i in set(sorted(d.values())):
    for j in sorted(d.items()):
        if j[1]==i:
            x.append(j)
print(x)

如果不将sorted(d.values())转换为set{},它将检查每个值,即使有相同的数字。例如,如果您的值列表为[1,2,2,3],它将检查值为“2”的项目两次,因此您的排序列表将包含重复的数据,这两个数据都有值“2”。但是set{}只保留每个元素中的一个,在这种情况下,for循环将检查d.values()的每个不同值。如果有具有相同值的项,代码将按键对它们进行排序,因为sorted(d.items())。 (为了更好地理解,您可以在不使用set{}的情况下使用此代码,并使用d.items()而不是sorted(d.items())

相关问题 更多 >

    热门问题