如何有效地创建一个具有键/值的字典,其值作为给定键的出现次数?

jim*_*mmy 0 python dictionary dataframe pandas

如何有效地创建带有键/值的字典,其中值是给定键出现的次数?

我目前正在这样做:

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 
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以以更有效的方式或使用更少的代码来完成此操作?

jua*_*aga 5

这实际上非常有效,只是不惯用。不要.update在这里使用,也不需要 if-else。

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

但这是一个常见的用例,标准库包括collections.Counter它只是一个专门用于这个事情的 dict 子类,你可以使用

import collections
dict_map = collections.Counter(data_frame["cars"])
Run Code Online (Sandbox Code Playgroud)

但是,由于您使用的是 pandas,因此应该首先使用内置的 pandas API。

>>> 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}
Run Code Online (Sandbox Code Playgroud)