我试图获得列表上重复次数最多的名称,如果有平局,则返回按字母顺序首先出现的那个。
我有以下清单:
names = ['sam','sam','leo','leo','john','jane','jane']
对于此列表,它应返回
jane
,因为它与其他名称有两个联系,但第一个按字母顺序排列。我在python中有以下代码。
def get_count(lst):
lst.sort()
d = {}
for item in lst:
if item not in d:
d[item] = [1]
else:
d[item].append(1)
def get_count_child(d):
fd = {}
for key, value in d.items():
fd[key] = sum(value)
return fd
return get_count_child(d)
它输出
{'jane': 2, 'john': 1, 'leo': 2, 'sam': 2}
有没有一种方法可以使用上面提到的约束从
jane
中提取值? 最佳答案
假设d
是您的字典。您要按值(计数)减少但键(名称)增加的顺序对项目进行排序。列表中第一个排序的项目是您想要的项目:
wanted = sorted(d.items(), key=lambda x: (-x[1], x[0]))[0]
# ('jane', 2)
wanted[0]
# 'jane'
请注意lambda函数中的取反:它确保较小的计数看起来“较大”,并且放置得更靠近末端。