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?

1
Daniel 7 mars 2016 à 23:44

4 réponses

Meilleure réponse

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]}
1
ᴀʀᴍᴀɴ 7 mars 2016 à 20:51

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]
0
schwobaseggl 7 mars 2016 à 21:08

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]}
1
Community 23 mai 2017 à 11:45

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)
1
gr1zzly be4r 7 mars 2016 à 20:58