Le paramètre, allWords, contient deux colonnes et des milliers de lignes. Le tweet de la première colonne. Le second contient un sentiment (0 pour négatif et 4 pour positif.
Comme le montre le code du bas, j'ai créé deux dictionnaires (négatif et positif) pour stocker le mot dans le dictionnaire avec leur fréquence.
Si vous exécutez le code, il s'affiche comme suit:
Ceci est pour le dictionnaire négatif {'transit': 1, 'infect': 4, 'spam': 6}
C'est pour le dictionnaire positif {'transit': 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)
Cependant, je veux créer un dictionnaire et stocker les deux valeurs pour la même clé. Par exemple
NewDictionary = {'transit': [1] [3], 'infect': [4] [5], 'spam': [6] [2]}
La première valeur représente le négatif. Alors que la deuxième valeur est positive. Comment y parvenir?
4 réponses
Comme je pense que la structure que vous voulez est bizarre et n'a pas de sens, je les mets tous les deux dans une seule liste:
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]}
Conservez simplement une paire de int
comme valeur pour chaque clé. Un defaultdict
vous aidera à vous débarrasser de certaines bosses:
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]
J'allais faire un commentaire, mais je ne peux pas encore le faire, alors je l'ai mis dans une réponse:
La première réponse ici pourrait vous aider à réaliser ce que vous voulez:
ajouter plusieurs valeurs pour une clé dans le dictionnaire Python
En bref: vous n'avez pas besoin d'utiliser de chiffres pour les clés, vous pouvez également utiliser des tableaux, vous vous retrouvez donc avec:
newDictionary = {'transit': [1,3], 'infect': [4,5], 'spam': [6,2]}
Vous pouvez faire en sorte que la valeur de chaque clé soit son propre dictionnaire ayant une clé negative
et positive
. Ainsi, votre dictionnaire modifié serait
{'transit': {'negative': 1, 'positive': 3}}
Etc., etc.
Ou, vous pouvez créer une petite classe qui a stocké une valeur négative et positive et avoir simplement cette valeur pour chacune de vos clés. Si votre classe ressemblait à:
class NegativePositiveStore:
def __init__(self):
self.negative = 0
self.positive = 0
Vos valeurs seraient alors toutes des instances distinctes de cet objet. Vous feriez ça comme:
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)
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.