我遇到了一个我在这里得到帮助的功能,我正在努力理解并纠正它。
这是函数(只是为了帮助我调试而抛出一些注释/打印)
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()
答案 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;?准确地说出你期望的结果会让事情变得更容易 - 猜你的意思要困难得多。