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)]
我将如何使用值而不是键对它进行升序排序。
解决方案
如果要按值排序(每个元组中的第二项),请指定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
可以简化为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)]