2 回答
TA贡献1797条经验 获得超4个赞
Counter(mydefaultdict)不是在做你认为它在做的事情。您正在将 a defaultdictof列表提供给Counter,其目的是计算出现次数,而不是计算列表的长度。事实上,价值你的Counter目标只是表,不是整数。Counter不会抱怨,因为它是dictand like的子类,dict可以用另一个字典初始化。
要按最长列表排序,您可以使用heapq.nlargest自定义函数:
from heapq import nlargest
for fruit, item_list in nlargest(10, mydefaultdict.items(), key=lambda x: len(x[1])):
print(f'{fruit}\tCount: {len(item_list)}\tList: {item_list}')
apple Count: 4 List: [2, 4, 6, 9]
orange Count: 3 List: [3, 7, 10]
peach Count: 2 List: [1, 8]
banana Count: 1 List: [5]
plum Count: 1 List: [11]
TA贡献1942条经验 获得超3个赞
这部分很难:
Counter(mydefaultdict)
您的对象mydefaultdict已经填充了列表作为值,但Counter对象通常使用正整数作为值。这实际上不是错误,因为它Counter是一个 dict 子类,所以它会接受任何 dict 作为初始化参数。除了有一个问题:most_common不再返回正常的结果(如果你很好奇,它实际上是根据列表放置字典顺序)。
也许更清楚的是这样的:
most_common_fruits = sorted(mydefaultdict, key=lambda f: len(mydefaultdict[f]), reverse=True)
for fruit in most_common_fruits:
item_list = mydefaultdict[fruit]
...
现在输出是这样的:
apple Count: 4 List: [2, 4, 6, 9]
orange Count: 3 List: [3, 7, 10]
peach Count: 2 List: [1, 8]
banana Count: 1 List: [5]
plum Count: 1 List: [11]
添加回答
举报