简单的字典理解

Simple dictionary comprehension

检查一下这个

languages = ['English', 'German', 'English', 'Italian', 'Italian', 'English', 'German', 'French']

我想从中生成一个频率 table。所以我做了

freq = {}
for language in languages:
    if language in freq:
        freq[language] += 1
    else:
        freq[language] = 1

哪个是正确的

但是我想在字典理解中使用 count() 来解决它。试了几次都错了

使用 Counter 来自 collections:

In [1]: from collections import Counter

In [2]: languages = ['English', 'German', 'English', 'Italian', 'Italian', 'English', 'Ger
   ...: man', 'French']

In [3]: count = Counter(languages)

In [4]: count
Out[4]: Counter({'English': 3, 'German': 2, 'Italian': 2, 'French': 1})

我会为此使用 Counter class:

from collections import Counter
freq = Counter(languages)

现在 freq 将按照语言列表中出现的降序包含您的语言。

既然你提到了“词典理解”,你可以试试:

>>> {k: languages.count(k) for k in dict.fromkeys(languages)}
{'English': 3, 'German': 2, 'Italian': 2, 'French': 1}
>>>

或者只是:

>>> {k: languages.count(k) for k in languages}
{'English': 3, 'German': 2, 'Italian': 2, 'French': 1}
>>>

或者如果没有字典理解,你可以尝试 dict(zip(...))map(...):

>>> dict(zip(languages, map(languages.count, languages)))
{'English': 3, 'German': 2, 'Italian': 2, 'French': 1}
>>> 
 

或者只是 collections.Counter:

>>> from collections import Counter
>>> Counter(languages)
Counter({'English': 3, 'German': 2, 'Italian': 2, 'French': 1})
>>>