现在我能够计算列表中每个单词的频率.
>>> list =['a', 'b', 'a', 'c', 'a', 'c']
frequency = {}
for w in words:
frequency[w] = frequency.get(w, 0) + 1
return frequency
Run Code Online (Sandbox Code Playgroud)
它给了我这个输出:
{'a':3,'b':1,'c:2'}
但我想给它的是每个列表项的对频率.例如,'b'在'a'1次之后,'c'在'a'之后2次.
{ '一个':{ 'B':1, 'C':2}, 'B':{ 'A':1}, 'C':{ 'A':1}}
我将如何实现这一目标?
DSM*_*DSM 12
如果您愿意接受稍微不同的格式,则很容易使用collections.Counter和获得成对计数zip:
>>> seq = list("abacac")
>>> from collections import Counter
>>> c = Counter(zip(seq, seq[1:]))
>>> c
Counter({('a', 'c'): 2, ('b', 'a'): 1, ('c', 'a'): 1, ('a', 'b'): 1})
Run Code Online (Sandbox Code Playgroud)
如果你真的想要你给出的格式,你有几个选择,但是有一种方法可以itertools.groupby用来收集所有以同一元素开头的对:
>>> from itertools import groupby
>>> grouped = groupby(sorted(zip(seq, seq[1:])), lambda x: x[0])
>>> {k: dict(Counter(x[1] for x in g)) for k,g in grouped}
{'a': {'c': 2, 'b': 1}, 'c': {'a': 1}, 'b': {'a': 1}}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4314 次 |
| 最近记录: |