Python 对一个值使用数组上的计数器,同时保留其他值的索引

Python 对一个值使用数组上的计数器,同时保留其他值的索引,python,collections,Python,Collections,在阅读了关于这个问题的答案后,我想知道如何计算某件事的发生频率,同时通过索引等方式检索一些额外的信息。比如说 a = ['fruit','Item#001'] b = ['fruit','Item#002'] c = ['meat','Item#003'] foods = [a,b,c] 现在我想数一数水果在食物清单上的次数。如果我在每个数组a、b和c的第一个索引上使用计数器,结果将有水果的数量,但我无法访问它是哪个项目。本质上,如果我使用最常见的,我会得到一个水果出现次数的列表,比如('fr

在阅读了关于这个问题的答案后,我想知道如何计算某件事的发生频率,同时通过索引等方式检索一些额外的信息。比如说

a = ['fruit','Item#001']
b = ['fruit','Item#002']
c = ['meat','Item#003']
foods = [a,b,c]
现在我想数一数水果在食物清单上的次数。如果我在每个数组a、b和c的第一个索引上使用计数器,结果将有水果的数量,但我无法访问它是哪个项目。本质上,如果我使用
最常见的
,我会得到一个水果出现次数的列表,比如('fruit',2),如何从这两个事件中获取所有项目

我想避免使用像这个问题这样的属性

例如,它将做我想做的事情,而不一定是计数器方法实际做的事情

counts = Counter(foods)
counts.most_common(10)
print counts
-> (('fruit',2)('meat',1))
print counts[0].Something_Like_Expand_Method()
-> ['fruit','Item#001'],['fruit','Item#002']

要计算一个值出现的频率并同时选择这些值,只需选择这些值并计算选择的数量:

fruits = [f for f in foods if f[0] == 'fruit']
fruit_count = len(fruits)
如果需要对所有条目执行此操作,则确实需要使用字典对项目进行分组:

food_groups = {}
for food in foods:
    food_groups.setdefault(food[0], []).append(food[1])
在这一点上,你可以要求任何一组,加上他们的长度:

fruit = food_groups['fruit']
fruit_count = len(fruit)
如果您仍然需要知道哪种食物最常见,您可以使用
max()
功能:

most_common_food = max(food_groups, key=lambda f: len(food_groups[f]))  # just the food group name
most_common_food_items = max(food_groups.values(), key=len)  # just the food group name
或者,您可以通过将字典映射键传递到值长度,从组中创建一个
计数器

group_counts = Counter({f: len(items) for f, items in food_groups.iteritems()})
for food, count in group_counts.most_common(2):
    print '{} ({}):'.format(food, count)
    print '  items {}\n'.format(', '.join(food_groups[food]))
演示:


要计算一个值出现的频率并同时选择这些值,只需选择这些值并计算选择的数量:

fruits = [f for f in foods if f[0] == 'fruit']
fruit_count = len(fruits)
如果需要对所有条目执行此操作,则确实需要使用字典对项目进行分组:

food_groups = {}
for food in foods:
    food_groups.setdefault(food[0], []).append(food[1])
在这一点上,你可以要求任何一组,加上他们的长度:

fruit = food_groups['fruit']
fruit_count = len(fruit)
如果您仍然需要知道哪种食物最常见,您可以使用
max()
功能:

most_common_food = max(food_groups, key=lambda f: len(food_groups[f]))  # just the food group name
most_common_food_items = max(food_groups.values(), key=len)  # just the food group name
或者,您可以通过将字典映射键传递到值长度,从组中创建一个
计数器

group_counts = Counter({f: len(items) for f, items in food_groups.iteritems()})
for food, count in group_counts.most_common(2):
    print '{} ({}):'.format(food, count)
    print '  items {}\n'.format(', '.join(food_groups[food]))
演示:


这很好,看起来小组真的很重要。这很好,看起来小组真的很重要。