【问题标题】:Updating my dictionary in python在 python 中更新我的字典
【发布时间】:2012-08-02 17:53:05
【问题描述】:

这应该是一个简单的问题,但我就是想不通。我有一本名为TD 的字典。 TD 的 {key1{key2:values}} 是 {1:{u'word':3, u'next':2, u'the':2},2:{...}...},其中 key1 是文档,key2 是文档中的单词,value 是该单词在文档中出现的次数,使用Counter方法获得。

我有大量文档,所以每个文档在 TD 中都有一个条目:

TD = {1:{u'word':2, u'next':1, u'the':5,...},
      2:{u'my':4, u'you':1, u'other':2,...},
      ...
      168:{u'word':1, u'person':1, u'and':8,...}}

我现在要做的是检查{1{...}} 中的每个单词,看看它是否出现在其他文档中,并对每个文档重复此过程。对于每个文档中出现一个单词,freq 增加 1。我有一个名为 Score 的新字典,应该如下所示:

{1:{u'word':score, u'next':score,...}, 2:{u'my':score, u'you':score,...}...}

要获得这本词典:

Score={}
count = 0
for x,i in TD[count].iteritems():
    freq=1
    num=1
    for y in TD[num].keys():
        if word in TF[num].keys():
            freq+=1
        num+=1
    Score[num]={x:(i*freq)}
    num+=1

这给了我以下输出:

{1:{u'word':score}, 2:{u'next':score}, 3:{u'the':score}...}

应该是:

{1:{u'word':score, u'next':score, u'the':score,...}...}

我认为问题出在Score[num]={x:(i*freq)}这一行

【问题讨论】:

    标签: python dictionary for-loop


    【解决方案1】:

    使用dict views 查找文档之间的交集,然后使用 Counter 来计算它们的频率:

    Score = {}
    for id, document in TD.iteritems():
        counts = Score[id] = Counter()
        for otherid, otherdocument in TD.iteritems():
            if otherid == id:
                continue  # Skip current document
            counts.update(document.viewkeys() & otherdocument.viewkeys())
    

    Score 中的每个条目都将计算文档中每个单词在其他文档中出现的频率。

    如果您还需要在当前文档中包含字数(计数 + 1),只需删除 if otherid == id 测试即可。

    在您自己的代码中,您混淆了 numcount,但在 python 中,您通常在任何情况下都不需要手动增加循环计数器。

    【讨论】:

    • 这行不通,因为我也需要这个词。如果我这样做,那将是{u'word':score},但我需要它是{1:{u'word':score, u'next':score,...},2{...}...}
    • 已更新;使用dict.viewkeys() 和一个内部循环来计算文档中的单词频率。
    • 仍然不是我想要做的。我只需要看看这个词是否出现在其他文件中,不管多久出现一次。我的原始字典TD 包含每个文档的字数。新的dict存储TD的值*该单词出现的文档数
    • @adohertyd:这正是我的代码的作用。它计算给定文档中每个单词出现在多少文档中。试试看。 :-)
    • 对不起,你是对的,我认为它是在计算每个单词在文档中出现的次数。谢谢!
    猜你喜欢
    • 2014-10-29
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多