J'ai un dictionnaire:
{'11.67': {'value': '12'}, '12.67': {'value': '12'}}
Ma sortie souhaitée est la suivante:
test={"11.67":1,"12.67":2}
indexes=test.keys()
final_dict={}
temp_dict={}
for index in indexes:
b=index.split('.')[0]
temp_dict['value']=b;
final_dict.update({index:temp_dict})
print (final_dict)
La valeur dans le second dictionnaire est le premier index lorsque faire le fractionnement sur la clé.
J'ai écrit ceci:
{'11.67': {'value': '11'}, '12.67': {'value': '12}}
Mais le résultat est faux:
test={"11.67":1,"12.67":2}
Je ne sais pas ce qui ne va pas. Merci
Et encore un UPDATE: Je dois utiliser des index qui sont dict_keys. Je dois partir de cette partie du code.
5 Réponses :
vous pouvez simplement faire ceci:
test = {"11.67": 1, "12.67": 2}
res = {key: {"value": str(int(float(key)))} for key in test}
# {'11.67': {'value': '11'}, '12.67': {'value': '12'}}
où je convertis d'abord les chaînes en float s, puis jette la partie fractionnaire en utilisant int code> et reconvertissez à nouveau en str .
ce qui ne va pas dans votre code est bien expliqué dans Réponse de Carsten .
désolé j'ai oublié de mentionner que je dois utiliser des index, car je commence le code à partir de cette partie Et encore un UPDATE: je dois utiliser des index qui est dict_keys. Je dois partir de cette partie du code.
alors ce serait juste pour la clé dans les index . (au lieu de pour la clé dans le test ).
Votre erreur consiste à déclarer le temp_dict en dehors de la boucle. Cela fonctionne:
test={"11.67":1,"12.67":2}
indexes=test.keys()
final_dict={}
for index in indexes:
temp_dict={}
b=index.split('.')[0]
temp_dict['value']=b;
final_dict.update({index:temp_dict})
print (final_dict)
Le problème est que vous faites toujours référence au même objet temp_dict , donc toute modification de celui-ci sera reflétée dans l'ensemble de son instance.
Je suggère d'utiliser une compréhension de dict pour aborder votre problème, qui réduira la création du dictionnaire à une seule ligne:
final_dict = {idx: {'value': idx.split('.')[0]} for idx in test.keys()}
try,
>>> {i:{'value': "%d"%eval(i)} for i in {"11.67":1,"12.67":2}}
{'11.67': {'value': '11'}, '12.67': {'value': '12'}}
>>>
{} -> compréhension du dictionnaire et mise en forme de l'ancienne chaîne "% s"
p>
Après avoir importé temp_dict dans le fichier final_dict, effacez le temp_dict. GOOD_LUCK
test={"11.67":1, "12.67":2, "15.66":3}
indexes = test.keys()
final_dict = {}
temp_dict = {}
for index in indexes:
b = index.split('.')[0]
temp_dict['value'] = b
final_dict[index] = temp_dict
temp_dict = {}
print(final_dict)