2016-03-07 74 views
0

参数allWords包含两列和数千行。第一列推文。第二个包含一个情绪(0阴性和4为阳性。如何在python中存储一个键的多个值

作为底部代码显示我已经创建了两个字典(负&正),以在字典中的字存储与它们的频率。

如果运行代码它显示因为它遵循:

这是负字典{“过境”:1,“传染”:4,“垃圾邮件”:6}

这是为正字典{'中转':3,'infect':5,'spam':2}

def vectorRepresentation(allWords):  
    negative = {} 
    positive = {} 

    for (t,s) in allWords: 
     if(s=='0'): 
      for w in t: 
       if w in negative: 
        negative[w]+=1 
       else: 
        negative[w]=1 
     if(s=='4'): 
      for w in t: 
       if w in positive: 
        positive[w]+=1 
       else: 
        positive[w]=1 
    print(negative) 
    print(positive) 

但是,我想创建一个字典并存储同一个键的两个值。例如

newDictionary = { '过境':[1] [3], '传染':[4] [5], '垃圾邮件':[6] [2]}

第一个值表示否定的。而第二个值是积极的。怎样才能做到这一点?

+1

您可以修改您的预期输出结构。就目前而言,这没有多大意义。这在语法上是不正确的:'[1] [3]'你想如何将它存储在你的字典中。你是否想要这样做,也许:'[1,3]'? – idjaw

+0

简答题:字典中每个键的值都是_something_,可以包含您想要跟踪的所有信息。它可以是一个'dict','list','tuple','defaultdict','namedtuple',自定义类的对象,......你的名字。选择什么取决于你的日期会有多少。真的,你应该按照这个顺序了解所有这些,并且根据你的需要来使用它们。 – alexis

回答

0

当我想到的结构,你婉t是奇怪,不要什么意义,我把它们都在一个列表:

neg = {'transit': 1, 'infect': 4, 'spam': 6} 
pos = {'transit': 3, 'infect': 5, 'spam': 2} 
result = {} 
for k,v in neg.items(): 
    result[k] = [v,pos[k]] 
result # {'spam': [6, 2], 'transit': [1, 3], 'infect': [4, 5]} 
+1

谢谢你的时间。它的工作原理 – danny

1

我要发表评论,但不能这样做,还让我把它放在一个答案:

这里的第一个答案可以帮助你实现你想要的:

append multiple values for one key in Python dictionary

简而言之:你并不需要使用数字钥匙,你也可以使用数组,所以你最终:

newDictionary = {'transit': [1,3], 'infect': [4,5], 'spam': [6,2]} 
+0

这是一个非常好的答案,你为什么要发表评论? – alexis

+0

,因为它是在被别人链接的问题之前发布的,所以回答链接问题的人应该获得信用? – Valjean

0

只要保持一对int为每个键的值。一个defaultdict将帮助你摆脱一些颠簸的:

from collections import defaultdict 

def vector_representation(all_words): 
    neg, pos = 0, 1 
    neg_pos = defaultdict(lambda: [0, 0]) # store two values for each key 

    for (t, s) in all_words: 
     if (s == '0'): 
      for w in t: 
       neg_pos[w][neg] += 1 
     if (s == '4'): 
      for w in t: 
       neg_pos[w][pos] += 1 
    return neg_pos 

d = vector_representation(...) 

d['transit'] 
>>> [1, 3] 

d['infect'] 
>>> [4, 5] 
+0

结果是什么样的? – Arman

1

你可以把对每个键的值它自己的字典,有一个negativepositive关键。所以,你的修改字典将是

{'transit': {'negative': 1, 'positive': 3}} 

等等等等。

或者,您可以创建一个存储负值和正值的小类,并将其作为每个键的值。如果您的类看起来像:

class NegativePositiveStore: 
    def __init__(self): 
     self.negative = 0 
     self.positive = 0 

你值将那么所有是对象的不同实例。你可以这样做:

word_dict = {} 
for (t,s) in allWords: 
    for w in t: 
     if w in word_dict: 
      if (s == '0'): 
       word_dict[w].negative += 1 
      elif (s == '4'): 
       word_dict[w].positive += 1 
     else: 
      word_dict[w] = NegativePositiveStore() 

print(word_dict) 
相关问题