-11

リストがあります:

 X = ['raz', 'dwa', 'raz', 'trzy', 'dwa', 'raz', 'trzy', 'cztery']

出力が必要です:

{'cztery': 1, 'dwa': 2, 'raz': 3, 'trzy': 2}
4

3 に答える 3

4

辞書内包表記を使用できます:

>>> lst = ['raz', 'dwa', 'raz', 'trzy', 'dwa', 'raz', 'trzy', 'cztery']
>>> {x:lst.count(x) for x in set(lst)}
{'raz': 3, 'cztery': 1, 'dwa': 2, 'trzy': 2}
>>>

または、次を使用できますcollections.Counter

>>> from collections import Counter
>>> Counter(lst)
Counter({'raz': 3, 'dwa': 2, 'trzy': 2, 'cztery': 1})
>>>

2 番目の解決策は、内包表記と同じことを行い、より効率的であり、多くの優れたツール (および など)Counterが付属しているクラスも使用するため、おそらく必要なものです。most_commonsubtract

于 2013-10-10T18:41:20.233 に答える
1

stdlib を使用した別の方法:

In [6]: from collections import Counter
In [7]: l = ['raz', 'dwa', 'raz', 'trzy', 'dwa', 'raz', 'trzy', 'cztery']
In [8]: dict(Counter(l).items())
Out[8]: {'cztery': 1, 'dwa': 2, 'raz': 3, 'trzy': 2}
于 2013-10-10T18:45:40.713 に答える
0

groupbyブライアンが提案したバージョンをデモンストレーションするだけです。

import itertools
data = ['raz', 'dwa', 'raz', 'trzy', 'dwa', 'raz', 'trzy', 'cztery']
print({k:len(list(v)) for k, v in itertools.groupby(sorted(data))})
于 2013-10-10T18:50:29.807 に答える