Comment obtenir un tableau csv a partir d'un dictionnaire

latitude27 Messages postés 1 Statut Membre -  
 Utilisateur anonyme -
bonjour guys , je me déméle avec un code python , j'ai un fichier d'entrée que j'ai parsé , pour obtenir une liste de dictionnaire sauf qu'a partir de ceci je dois les stocker dans un tableau d'une maniere particuliere

voici le dico , une partie

data= {'1QMF': [['guanidinium', '', 'ARG', '426', 'A'], ['hyd_ali', 'cd', 'ARG', '426', 'A'], ['bb', 'backbone', 'GLY', '647', 'A'], ['hyd_ali', '', 'ALA', '650', 'A'], ['hyd_ali', 'cbcg2', 'VAL', '662', 'A']], '2NT7': [['guanidinium', '', 'ARG', '254', 'A'], ['bb', 'backbone', 'GLY', '259', 'A'], ['hyd_ali', 'cb', 'MET', '258', 'A']], '2F6Z': [['guanidinium', '', 'ARG', '254', 'A'], ['bb', 'backbone', 'GLY', '259', 'A'], ['hyd_ali', 'cb', 'MET', '258', 'A']], '3U2V': [['guanidinium', '', 'ARG', '77', 'B'], ['bb', 'backbone', 'GLY', '215', 'B'], ['hyd_ali', 'cbcg', 'LEU', '214', 'B']], '3A9E': [['guanidinium', '', 'ARG', '321', 'A'], ['bb', 'backbone', 'ALA', '332', 'A'], ['hyd_ali', '', 'ALA', '276', 'A']], '2ZI6': [['guanidinium', '', 'ARG', '2192', 'B'], ['bb', 'backbone', 'ALA', '2031', 'B'], ['hyd_ali', 'cb', 'ARG', '2188', 'B']], '1X7Z': [['guanidinium', '', 'ARG', '220', 'A'], ['bb', 'backbone', 'GLY', '192', 'A'], ['hyd_ali', '', 'ALA', '195', 'A']]}

for key, val in data.iteritems():
    print key

###me retourne les valeurs du dico
for v in data.values() :
	print v 

### La methode items retourne une liste de tuples de la forme (cle, valeur). La liste contient toutes les donnees stockees dans le dictionnaire. 	
for keyval in data.items() : 
	print keyval 




mais je souhaite , obtenir une sortie output , dans un fichier csv ,
de ce type de tableau

1QMF guanidiniumARG426 hyd_aliARG426 backboneGLY647 hydaliALA650
2NT7 'guanidinium'ARG254' backboneGLY259 hyd_aliMET258

......

ainsi de suite sous forme de tableau ??,
une ame charitable pourrait m'aider ,,,,???

1 réponse

  1. Utilisateur anonyme
     
    C'est très moche comme approche, je trouve ton dictionnaire bien compliqué...

    Il faut travailler en deux étapes

    * Analyser ta liste pour avoir les indices 0, 2 et 3 espacé
    * Construire ta ligne à l'aide de ta fonction analyser

    Voilà ce que je propose

    * La classe LengthException pour vérifier que ta liste de listes contient bien 5 listes pour chaque clé de dictionnaire et vérifier que chaque liste contient bien 5 éléments.
    En plus de cela, elle t'avertira de l'endroit, liste ou liste de listes et spécifiera qu'elle est celle non fonctionnelle (faisant bugger le programme)

    * La fonction parser pour arriver à ce résultat -> guanidinium ARG 426
    * La fonction construct pour construire la ligne finale pour chaque clé -> guanidinium ARG 426 hyd_ali ARG 426 bb GLY 647 hyd_ali ALA 650 hyd_ali VAL 662

    Voici le code

    class LengthException(Exception):
        pass
    
    def parse(myList):
        LENGTH = 5
        if len(myList) != LENGTH:
            raise LengthException("bad length of list -> {}".format(repr(myList)))
    
        a, b, c, d, e = myList
    
        return ' '.join([a, c, d])
    
    def constructLine(listOfList):
        LENGTH = 5
        if len(listOfList) != LENGTH:
            raise LengthException("bad length of listOfList -> {}".format(repr(listOfList)))
    
        res = ''
        for myList in listOfList:
            res += parse(myList)
            res += ' '
    
        return res
    
    data= {'1QMF': [['guanidinium', '', 'ARG', '426', 'A'], ['hyd_ali', 'cd', 'ARG', '426', 'A'], ['bb', 'backbone', 'GLY', '647', 'A'], ['hyd_ali', '', 'ALA', '650', 'A'], ['hyd_ali', 'cbcg2', 'VAL', '662', 'A']]}
    
    for key in data:
        print(constructLine(data[key]))


    Bonne continuation...
    0