如何使用词典理解

时间:2015-10-08 03:11:49

标签: python list python-2.7 dictionary dictionary-comprehension

我有一个充满文本的python列表。就像从每个文档中设置单词一样。因此,对于每个文档,我都有一个列表,然后列出所有文档。

所有列表仅包含唯一字词。 我的目的是计算完整文档中每个单词的出现次数。我可以使用以下代码成功完成此操作:

for x in texts_list:
    for l in x:
        if l in term_appearance:
            term_appearance[l] += 1
        else:
            term_appearance[l] = 1

但我想用词典理解来做同样的事情。这是第一次,我正在尝试编写字典理解并使用stackoverflow中以前的现有帖子,我已经能够编写以下内容:

from collections import defaultdict
term_appearance = defaultdict(int)

{{term_appearance[l] : term_appearance[l] + 1 if l else term_appearance[l] : 1 for l in x} for x in texts_list}

上一篇文章供参考:

Simple syntax error in Python if else dict comprehension

正如上文所述,我还使用了以下代码:

{{l : term_appearance[l] + 1 if l else 1 for l in x} for x in texts_list}

上面的代码成功生成了空列表,但最终抛出了以下回溯:

[]

[]

[]

[]

Traceback (most recent call last):

  File "term_count_fltr.py", line 28, in <module>

    {{l : term_appearance[l] + 1 if l else 1 for l in x} for x in texts_list}
  File "term_count_fltr.py", line 28, in <setcomp>

    {{l : term_appearance[l] + 1 if l else 1 for l in x} for x in texts_list}

TypeError: unhashable type: 'dict'

非常感谢任何有助于提高我目前理解的帮助。

看看上面的错误,我也尝试了

[{l : term_appearance[l] + 1 if l else 1 for l in x} for x in texts_list]

这没有任何错误,但输出只是空列表。

1 个答案:

答案 0 :(得分:3)

Python 2.7+中的字典理解不会像你认为的那样工作。

与列表推导相似,它们会创建词典,但您无法使用它们将键添加到 现有词典(其中在这种情况下,你正在尝试做。)