2012-07-19 64 views
2

我在这里遇到了一个函数的问题,我试图理解它并纠正它。为什么我的价值不加在我的计划中?

这里的功能(有一些评论/打印在简单地抛出来帮我调试)

def accumulate_by_category(word_values, cat_sums, cats): 
     for word, value in word_values.items(): 
       print word 
       for cat in cats[word]: 
         print cat 
         #cat_sums[cat] += value 
         cat_sums[cat].append(value) 
       print cat_sums 

现在,word_values应该是这个样子:

{'a': 4, 'angry': 0, 'sad': 0, 'grateful': 0, 'happy': 0} 

cat_sums应该看起来像这样:

defaultdict(<type 'list'>, {'composed': [0], 'elated': [0], 'unsure': [0], 'hostile': [0], 'tired': [0], 'depressed': [0], 'guilty': [0], 'confused': [0], 'clearheaded': [0], 'anxious': [0], 'confident': [0], 'agreeable': [0], 'energetic': [0]}) 

和猫应该是这样的:

defaultdict(<type 'list'>, {'depressed': ['sad'], 'elated': ['happy', 'grateful', 'a'], 'hostile': ['angry']}) 

基本上,该函数试图做的,是采取每个值在word_values,并最终加入那些cat_sums。目前情况并非如此 - 由于某些原因,没有值附加。我很难弄清楚为什么 - 当我尝试print cat时,它出现空白。但是print word给了我一个单词列表。从理论上讲,对于猫的猫[词]应该提出猫的每个术语,但它不会。

我在做什么错?

我最终只是想将所有的值添加到cat_sums中,以便我可以将它写入数据库。另外,我是否必须返回cat_sums的值才能够执行此操作?

这是我的数据库编写代码(catnums的参数提交给cat_sums):

for key in catnums: 
     x = catnums[key] 
     for value in x: 
       cmd = "UPDATE resulttest SET value=\"" + str(value) + "\" WHERE category=\"" + key + "\""; 
       c.execute(cmd) 
       db.commit() 
+0

我确定这是由于我如何遍历列表。我快到了。 – 2012-07-19 02:45:53

回答

0
for cat in cats[word] 

不执行任何操作,因为cats有没有按键'a''angry''sad'等。由于它是一个默认的字典,我假设你有它默认为一个空的列表,所以它就像每次说for cat in []一样。

如果添加:

{'a': 4, 'angry': 0, 'sad': 0, 'grateful': 0, 'happy': 0, 'hostile': 2} 

您将理论上得到你想要的。但是从你的问题来看,你不清楚你期望的输出。

Basically, what the function is trying to do, is take each of the values in word_values , and add those ultimately to cat_sums .

这很不明确,因为两者都是字典。你的意思是当密钥匹配时将word_values的值加上cat_sums的值?当你说“添加”时,你的意思是“追加”?准确地说明你期望的结果会使事情变得更容易 - 猜测你的意思要困难得多。

1

完全搞砸了! cats[word]是什么意思? 猫:钥匙应该是“郁闷”,“心花怒放”,“敌对” 但在word_values,他们“愤怒”,“快乐”,“悲伤”,“感谢”

我做了一些改变,希望这就是你想要的。

def accumulate_by_category(word_values, cat_sums, cats): 
    for word, value in word_values.items(): 
     print word 
     for k, v in cats.items(): 
      if word in v: 
       print k 
       if not cat_sums.has_key(k): 
        cat_sums[k] = 0 
       cat_sums[k] += value 
       print cat_sums 
       break 
+0

这会检查猫的类别,并将与这些类别相关的词语相关的值添加到cat_sums中? – 2012-07-19 03:29:27

+0

我希望每个与某个类别相关的单词(通过猫)在cat_sum中添加在一起。 – 2012-07-19 03:30:05

+0

只需将我的代码复制到单个文件中,尝试一下,看看它是否是您想要的。 – Takahiro 2012-07-19 03:58:49

相关问题