简单的字典理解
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})
>>>
检查一下这个
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})
>>>