Как эффективно создать dict с ключом / значением, где значение - это количество вхождений для данного ключа?

Сейчас я делаю вот так:

dict_map = dict()

for car in data_frame["cars"]:
    if car in dict_map :
        dict_map.update({car : dict_counter.get(car)+1})
    else:
        dict_map.update({car : 1})
        
return dict_map 

Есть ли другой способ сделать это более эффективно или с меньшим использованием кода?

0
jimmy 10 Окт 2021 в 03:12

2 ответа

Лучший ответ

На самом деле это очень эффективно, просто унидиоматично. Не используйте здесь .update, и в if-else нет необходимости.

dict_map = {}
for car in data_frame['cars']:
    dict_map[car] = dict_map.get(car, 0) + 1

Но это настолько распространенный вариант использования, что стандартная библиотека включает collections.Counter, который является просто подклассом dict, специализированным именно для этого, и вы можете получить это, используя

import collections
dict_map = collections.Counter(data_frame["cars"])

Однако , поскольку вы используете pandas, сначала вам следует использовать встроенный API pandas.

>>> data_frame = pd.DataFrame(dict(cars=['a','b','c','a','a','c']))
>>> data_frame['cars'].value_counts()
a    3
c    2
b    1
Name: cars, dtype: int64
>>> data_frame['cars'].value_counts().to_dict()
{'a': 3, 'c': 2, 'b': 1}
5
juanpa.arrivillaga 10 Окт 2021 в 02:04
from collections import Counter
dict_map = dict(Counter(data_frame["cars"])
1
tzinie 10 Окт 2021 в 00:46