我尝试将一个列表添加到字典键中,但是当我追加一个值时,它会返回值" None"。我也试过没有成功collections.defaultdict(列表) 提前感谢您的帮助!
CODE:
text = "ABBBAACCCCAABBCCCCAABCBCBCABCCCA"
chain = dict()
for i in range (0, text.__len__()-1):
key = text[i : i+1]
next_word = text[i +1 : i +2]
if key not in chain.keys():
chain.setdefault(key)
else:
chain.setdefault(key, [].append(next_word))
print(key, next_word, chain[key], chain)
输出:
答案 0 :(得分:1)
[].append()
返回None
。您想要附加{em>返回值dict.setdefault()
而不是。使用dict.setdefault()
时,您也不需要进行密钥包含测试; setdefault()
已经为您进行测试。
接下来,请勿致电object.__len__()
。请改用len(object)
。我还使用{}
代替dict()
;后者必须查找名称并进行函数调用,{}
文字被编译为单个字节码以创建字典。
这有效:
for i in range(len(text) - 1):
key = text[i:i + 1]
next_word = text[i + 1:i + 2]
chain.setdefault(key, []).append(next_word)
您也可以使用zip()
配对字母:
for key, next_word in zip(text, text[1:]):
chain.setdefault(key, []).append(next_word)
演示:
>>> text = "ABBBAACCCCAABBCCCCAABCBCBCABCCCA"
>>> chain = {}
>>> for key, next_word in zip(text, text[1:]):
... chain.setdefault(key, []).append(next_word)
...
>>> chain
{'A': ['B', 'A', 'C', 'A', 'B', 'A', 'B', 'B'], 'B': ['B', 'B', 'A', 'B', 'C', 'C', 'C', 'C', 'C'], 'C': ['C', 'C', 'C', 'A', 'C', 'C', 'C', 'A', 'B', 'B', 'A', 'C', 'C', 'A']}
>>> from pprint import pprint
>>> pprint(chain)
{'A': ['B', 'A', 'C', 'A', 'B', 'A', 'B', 'B'],
'B': ['B', 'B', 'A', 'B', 'C', 'C', 'C', 'C', 'C'],
'C': ['C', 'C', 'C', 'A', 'C', 'C', 'C', 'A', 'B', 'B', 'A', 'C', 'C', 'A']}