为什么我的价值观在我的计划中没有增加?

时间:2012-07-19 02:24:25

标签: python

我遇到了一个我在这里得到帮助的功能,我正在努力理解并纠正它。

这是函数(只是为了帮助我调试而抛出一些注释/打印)

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给了我一个单词列表。从理论上讲,对于猫中的猫[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()

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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}

理论上你会得到你想要的东西。但是从你的问题中可以清楚地看出你期望得到什么输出。

  

基本上,该功能尝试执行的操作是获取word_values中的每个值,并将这些值最终添加到cat_sums

这很不清楚,因为两者都是字典。您的意思是当密钥匹配时,将word_values的值添加到cat_sums的值中吗?当你说&#34;添加&#34;时,你的意思是&#34;追加&#34;?准确地说出你期望的结果会让事情变得更容易 - 猜你的意思要困难得多。