- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从文件中读取并清理的文本:
['the', 'cat', 'chased', 'the', 'dog', 'fled']
挑战是返回一个字典,其中每个单词作为值,可以跟随它的单词作为键,并计算它跟随它的次数:
{'the': {'cat': 1, 'dog': 1}, 'chased': {'the': 1}, 'cat': {'chased': 1}, 'dog': {'fled': 1}}
Collections.counter 将计算每个唯一值的频率。然而,我解决这一挑战的算法又长又笨重。如何使用 defaultdict 来简化此问题的解决?
编辑:这是我解决这个问题的代码。一个缺陷是嵌套字典中的值是一个单词在文本中出现的总次数,而不是它实际跟随该特定单词的次数。
from collections import Counter, defaultdict
wordsFile = f.read()
words = [x.strip(string.punctuation).lower() for x in wordsFile.split()]
counter = Counter(words)
# the dict of [unique word]:[index of appearance in 'words']
index = defaultdict(list)
# Appends every position of 'term' to the 'term' key
for pos, term in enumerate(words):
index[term].append(pos)
# range ends at len(index) - 2 because last word in text has no follower
master = {}
for i in range(0,(len(index)-2)):
# z will hold the [index of appearance in 'words'] values
z = []
z = index.values()[i]
try:
# Because I am interested in follower words
z = [words[a+1] for a in z]
print z; print
# To avoid value errors if a+1 exceeds range of list
except Exception:
pass
# For each word, build r into the dict that contains each follower word and its frequency.
r = {}
for key in z:
r.update({key: counter[key]})
master.update({index.keys()[i]:r})
return master
最佳答案
我有一个简单的答案,虽然它不使用 defaultdict - 只是标准字典和 setdefault。我可能没有理解您的意图,但这是我所看到的:
def word_analysis(input):
from itertools import tee, izip
i1, i2 = tee(input)
i2.next()
results = {}
for w1,w2 in izip(i1,i2): # Process works pairwise
d = results.setdefault(w1,{}) # Establish/use the first word dict
d[w2] = 1 + d.setdefault(w2,0) # Increment the counter
return results
print word_analysis(['the', 'cat', 'chased', 'the', 'dog', 'fled'])
对我来说,这提供了与您报告的相同的输出:
{'the': {'dog': 1, 'cat': 1}, 'chased': {'the': 1}, 'dog': {'fled': 1}, 'cat': {'chased': 1}}
我错过了什么吗?
关于python - Defaultdict(defaultdict) 用于文本分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34748904/
从文件中读取并清理的文本: ['the', 'cat', 'chased', 'the', 'dog', 'fled'] 挑战是返回一个字典,其中每个单词作为值,可以跟随它的单词作为键,并计算它跟随它
使用 this answer ,我创建了 defaultdict 的 defaultdict。现在,我想把那个嵌套很深的 dict 对象变回一个普通的 python dict。 from collec
我的应用程序说参数必须是可调用的或无类型有什么特别的原因吗?我很确定这就是您使用 defaultdict 作为其值实例化 defaultdict 的方式。 dict = defaultdict(def
我想实现一个类似 dict 的数据结构,它具有以下属性: from collections import UserDict class TestDict(UserDict): pass tes
我有两个 defaultdict : defaultdict(, {'a': ['OS', 'sys', 'procs'], 'b': ['OS', 'sys']}) defaultdict(, {'
我有一个defaultdict(Set): from sets import Set from collections import defaultdict values = defaultdict(
我正在使用 defaultdict 来存储数百万个短语,所以我的数据结构看起来像 mydict['string'] = set(['other', 'strings'])。它似乎适用于较小的集合,但当
所以 defaultdict documentation提到,如果缺少某个项目,则 default_factory 返回的值“将插入字典中作为键,然后返回。”这在大多数情况下都很棒,但在这种情况下我真
我有一个默认的列表列表,但我基本上想这样做: myDefaultDict = filter(lambda k: len(k)>1, myDefaultDict) 除了它似乎只适用于列表。我能做什么?
这可能是一个愚蠢的问题,但是:我的代码运行良好,直到我尝试添加 ml.我尝试了几种方式但是 init_dict = [] with open("example.csv", "r") as new_da
我正在尝试将列表递归地转换为嵌套字典,如下所示:- 给定输入:- parse_list = ['A','B','C','D'] 所需输出:- data = [ {'name': 'A',
我有一个名为“n”的字典,其中有一个键值关系(字典中的字典)。 此处的 key 将是tenant_id (b77865b66fd544e0841aa7dbca8bdc97, 7b73b9644e824
我有一个 Excel 数据集列表,其中包含以下某些信息: Category Subcategory Name Main Dish Noodle Tomato Noodl
我有以下内容: a = [{ "_id" : { "reportId" : "5a27cda63fff647c33a14b31" }, "amount" : 3000 }, { "_id"
这很简单: 'foo {bar}'.format(**{'bar': 0}) 这不起作用,产生一个 KeyError: from collections import defaultdict d =
我有这个: dict1 = defaultdict(lambda:defaultdict(list)) dict1['rl1']['sh1'] = ['a','b'] dict1['rl1']['sh
我正在尝试在 python 中使用 defalultdict 和不赋值的行为 数据如下: data = {'APPLaunch_ftrace': [63.3, 24.5, 8.4, 2.3, 0.9,
我有一个字典列表。我们称它为:list_of_dict。列表中的词典采用以下形式: {'a' : 1, 'b' : 5, 'c' : 3, 'd' : 6} 和 {'a' : 3, 'f' : 2,
我想使用关键字解包运算符 ** 格式化和打印字典中的数据。 格式字符串可能引用了很多关键字,而字典可能没有所有需要的关键字。对于缺少的键,我想使用字符串“N/A”作为默认值。 我想要一个聪明的解决方案
考虑以下默认字典: data = defaultdict(list) data['key1'] = [{'check': '', 'sth1_1':'k1', 'sth1_2':'k2'}] data
我是一名优秀的程序员,十分优秀!