2017-10-18 6 views
-3

J'ai des difficultés à coder le bon code pour obtenir la chaîne à diviser en dictionnaire. J'ai essayé la méthode ci-dessous:Impossible d'obtenir une chaîne triée dans un dictionnaire pour créer un diagramme à secteurs

maindict = dict(item.split(":") for item in mainmain.split(",")) 
print maindict 

Cependant, j'ai obtenu l'erreur suivante déclarant

"ValueError: dictionary update sequence element #1 has length 1; 2 is required".

Le dessous est un extrait de mes codes.

Tout d'abord, l'utilisateur saisira son fichier via l'explorateur de fichiers et cette fonction Category() sera appelée et le fichier sera lu. A partir du fichier CSV, la fréquence des mots sera comptée et mise dans une chaîne à afficher.

def category(x): 

    readCSV = csv.DictReader(open(filename, 'rb')) 

    dict_list = [] 

    for read in readCSV: 
     dict_list.append(read) 

    for item in dict_list: 
     rowRequest = item["Order Group"].title() 
     string = rowRequest.replace('-', ' ').strip() 
     if str(string): 
      count = frequencyReq.get(string, 0) 
      frequencyReq[string] = count + 1 

    freqSort = sorted(frequencyReq.iteritems()) 
    Maintainence = "" 

    num_maintainence = 0 

    for item, freqCom in freqSort: 
     main = ['Acmv', 'Air', 'Audio', 'Elec', 'Lift', 'Light'] 

     if any(word in item for word in main): 
      num_maintainence += freqCom 
      Maintainence += "%s:%d, " % (item, freqCom) 
      Mainit = "%s" % num_maintainence 
      mainmain = "%s" % Maintainence 

      maindict = dict(item.split(":") for item in mainmain.split(", ")) 
      print maindict 

De l'mainmain, je suis la chaîne que je voulais qui est

Acmv:2, Air Conditioning:50, Audio Video Equipment:1, Electrical:22, Lift:60, Lighting:118, 

lors de l'impression.

Maintenant, j'ai besoin de séparer cette chaîne dans un dictionnaire afin que je puisse prendre la variable et les valeurs du dictionnaire pour créer un graphique à secteurs.

+3

-vous déjà utilisé vos données sous la forme d'une liste de paires clé/valeur, qui aurait pu être tourné directement dans un dictionnaire - pourquoi dans le monde vous joindre à tout en un chaîne, puis la fractionner dans les éléments individuels ??? Quoi qu'il en soit, le problème est le ', 'sur votre chaîne - le fractionnement produit un élément vide à la fin, en séparant ce blanc sur': 'produit un seul élément, pas les deux requis pour le constructeur dict. – jasonharper

Répondre

-1

Je pense que le problème est la dernière virgule de la chaîne mainmain. Essayez dépouillant comme ceci:

maindict = dict(item.split(':') for item in mainmain.strip(',').split(','))