我试图对由 (item_number, fruit)
元组构成的列表进行操作,计算每种水果出现的次数。使用 collections.Counter
就足够了。我还使用了 most_common()
。
但是,当我试图同时显示与特定类型的水果相对应的项目编号列表时,它们就会变得无序。
这是我的示例代码:
#!/usr/bin/env python
from collections import Counter, defaultdict
mylist = [
(1, 'peach'),
(2, 'apple'),
(3, 'orange'),
(4, 'apple'),
(5, 'banana'),
(6, 'apple'),
(7, 'orange'),
(8, 'peach'),
(9, 'apple'),
(10, 'orange'),
(11, 'plum'),
]
# FIRST, HANDLE JUST COUNTING THE ITEMS
normal_list = []
# append to a simple list
for item_number, fruit in mylist:
normal_list.append(fruit)
# prints just the name of each fruit and how many times it appears
for fruit, count in Counter(normal_list).most_common(10):
print(f'{fruit}\tCount: {count}')
# NOW TRY TO INCLUDE THE LIST IF ITEM NUMBERS ALSO
mydefaultdict = defaultdict(list)
# append to the defaultdict
for item_number, fruit in mylist:
mydefaultdict[fruit].append(item_number)
# prints each fruit, followed by count, and finally the list of IPs for each
for fruit, item_list in Counter(mydefaultdict).most_common(10):
print(f'{fruit}\tCount: {len(item_list)}\tList: {item_list}')
我得到了较为简单版本的预期输出:
apple Count: 4
orange Count: 3
peach Count: 2
banana Count: 1
plum Count: 1
然而,当我尝试将item_number列表添加到其中时,结果不再排序,这在我使用小于水果品种总数的most_common()值时会造成混乱:
plum Count: 1 List: [11]
banana Count: 1 List: [5]
orange Count: 3 List: [3, 7, 10]
apple Count: 4 List: [2, 4, 6, 9]
peach Count: 2 List: [1, 8]
我相信我在这里可以做些不同的事情,但我不太确定应该做什么。
items
提取键值组合,而len(x [1])
获取值(即列表)的长度。对于您更广泛的问题,建议您单独制定一个特定的问题。 - jppmost_common
之前,您正在定义不同的Counter
对象。第一个是Counter(normal_list)
,第二个是Counter(mydefaultdict)
。没有理由这些应该在应用most_common
时给出相同的结果。 - jppnlargest(10, mydefaultdict.items(), key=lambda x: len(x[1]))
是不同的输入。 - jpp