0

我已经对收集计数器进行了排序,并且我试图获取其索引banana为 1,因为 和 的频率cherry相同banana,但它给出了 2。或者 的索引mango必须是 2 而不是 3。

我的代码:

from collections import Counter
    
fruits = ['apple','cherry', 'apple','banana','banana','cherry','apple', 'mango']
fruits_frequency = Counter([item for items, c in Counter(fruits).most_common() for item in [items] * c])

print(fruits_frequency)
mapping = dict((item[1][0], item[0]) for item in enumerate(fruits_frequency.most_common()))

print(mapping["banana"])

输出:

Counter({'apple': 3, 'cherry': 2, 'banana': 2, 'mango': 1})
2
4

3 回答 3

1

您可以将itertools.groupby与字典理解一起使用

mapping = {x[0]: idx for idx, group in enumerate(groupby(fruits_frequency.items(), lambda x: x[1])) for x in group[1]}
print(mapping)

输出:

{'apple': 0, 'cherry': 1, 'banana': 1, 'mango': 2}
于 2020-07-19T17:47:46.027 回答
0

如果我了解您要获取的内容,您可能想要获取不同fruit_frequencies值的排序列表,然后在其中找到值的索引bananas

像这样:

distinct_values = sorted(list(set(fruits_frequency.values())), reverse=True)
print(distinct_values.index(mapping["banana"]))
于 2020-07-19T17:48:24.690 回答
0
mapping = dict((item[1][0], item[0]) for item in enumerate(sorted(fruits_frequency.most_common(),  key=lambda y: (y[1], y[0]))))

通过使用排序fruits_frequency.most_common()的关键参数对零件进行排序:key=lambda y: (y[1], y[0])基本上首先按出现次数和字母顺序排序。

于 2020-07-19T17:35:13.063 回答