计算 Python 中二维列表中最常见的元素

Counting the most common element in a 2D List in Python

我正在寻找一种方法来计算二维列表中的出现次数。例如我有一个这样的列表:

[[John, 3],[Chris, 3],[Bryan,5],[John,3],[John,7]]

作为输出,我想计算 John 最常见的数字是哪些

Most common number for the John is: 3

我用

轻松完成了所有名称
Counter(my_list[1]).most_common(5)

有人建议这样做吗?

这应该有效。

from collections import Counter
main_list = [['John', 3],['Chris', 3],['Bryan',5],['John',3],['John',7]] #your_list
new_list = [i[1] for i in main_list if i[0]=='John']
print(Counter(new_list).most_common(1)[0][0])

我可能会在对输入数据进行查询之前重新调整输入数据的形状。也许名称与值:

name_lookup = defaultdict(list)
for name, value in my_list:
    name_lookup[name].append(value)

name = 'John'
most_common, _ = Counter(name_lookup[name]).most_common(1)[0]
print(f"Most common number for {name} is: {most_common}")

您还可以进行过滤和映射:

my_list = [['John', 3],['Chris', 3],['Bryan',5],['John',3],['John',7]]

print(Counter(map(lambda y: y[1], filter(lambda x: x[0] == "John", my_list))).most_common(1))

如果您 100% 确定每个名称总是恰好有 1 个最频繁出现的元素,您可以按名称选择 sort,按名称选择 groupby,然后使用statistics.mode 以下方式:

import itertools
import statistics
some_data = [['John', 3],['Chris', 3],['Bryan',5],['John',3],['John',7]]
sorted_data = sorted(some_data,key=lambda x:x[0]) # sort by name
most_frequent = {name:statistics.mode(j[-1] for j in list(data)) for name,data in itertools.groupby(sorted_data,key=lambda x:x[0])}
print(most_frequent) # {'Bryan': 5, 'Chris': 3, 'John': 3}

itertools.groupby returns 对名称数据,但由于 datas 本身包含键(在我们的例子中是名称)和值(在我们的例子中是数字),我们需要理解获得 "raw" 个值。