Python将多个值附加到字典附加"无"

时间:2018-04-04 10:06:15

标签: python-3.x

我尝试将一个列表添加到字典键中,但是当我追加一个值时,它会返回值" 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)

输出:

  • A B无{' A':无}
  • B B无{' B':无,' A':无}
  • B B无{' B':无,' A':无}
  • B A无{' B':无,' A':无}
  • ...

1 个答案:

答案 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']}