2016-07-26 1 views
0

Je dois obtenir le "résultat" dans l'objet dict, je suis en boucle et j'obtiens des clés et des valeurs au format suivant, que j'ai défini dans la variable "opp".Stocker un ensemble de chaînes personnalisées formatées dans un dictionnaire en utilisant python

Ce dont j'ai besoin, c'est que je veux stocker les données (c'est-à-dire d'opp) à un dict. Comment puis-je faire ceci?

Voici mon code:

for service, svc_limits in result.items(): 
    for limit_name, limit in svc_limits.items(): 
     for warn in limit.get_warnings(): 

      opp = ("'{service}/'{limit_name}'': '[{u}]'".format(
           service=service,limit_name=limit_name,u=str(warn)) 
       ) 

Mon exemple de sortie:

{"contact": {"permanentnumber":"sample123","tempnum":"jki345"}} 

De cela, je suis sortie comme

contact/permanentnumber:sample123 
contact/tempnum:jki345 

et obtenir comme une chaîne séparée Type de données.

J'ai besoin de stocker cet ensemble de chaînes au format dictionnaire, pour écrire dans le fichier YAML en utilisant le vidage mais cela ne fonctionne pas. Un seul ensemble de valeurs est écrit dans le fichier. J'ai besoin de stocker ces deux valeurs dans le nouveau fichier.

 opp = ("'{service}/'{limit_name}'': '[{u}]'".format(
          service=service, 
          limit_name=limit_name, 
          u=str(warn) 

         ) 
     ) 
     samp = {opp} 

Il me renvoie uniquement Set dtatype, mais ce dont j'ai besoin, c'est d'un dictionnaire.

set(["'Contact/'permanentnumber'': '[4]'"]) <type 'set'> 
set(["'Contact/'temporarynum' ': '[4]'"]) <type 'set'> 

Comment puis-je gérer cela?

Répondre

0

En Python, si a est une variable, et que vous faites:

x = {a} 

alors x sera un ensemble avec un élément. Si vous voulez que x soit un dict puis faire:

x = {'somekey': a} 

ou:

x = dict(somekey=a) 

quoi utiliser comme somekey dépend de votre application, mais il pourrait être judicieux de ne pas convertir {"contact": {"permanentnumber":"sample123","tempnum":"jki345"}} à:

contact/permanentnumber: sample123 
contact/tempnum: jki345 

en faisant

import sys 
import ruamel.yaml 

result = {"contact": {"permanentnumber":"sample123","tempnum":"jki345"}} 

opp = {} 

for service, svc_limits in result.items(): 
    for limit_name, limit in svc_limits.items(): 
      opp["{service}/{limit_name}".format(service=service, limit_name=limit_name)] = \ 
       "{u!s}".format(u=limit) 

ruamel.yaml.round_trip_dump(opp, sys.stdout) 

qui vous donne la sortie YAML:

contact/tempnum: jki345 
contact/permanentnumber: sample123 
+0

grâce Anthon ... – user4223185