C'est le dictionnaire
cars = {'A':{'speed':70,
'color':2},
'B':{'speed':60,
'color':3}}
Utiliser ce for loop
for keys,values in cars.items():
print(keys)
print(values)
Il imprime ce qui suit:
B
{'color': 3, 'speed': 60}
A
{'color': 2, 'speed': 70}
Mais je veux que le programme l’imprime comme ceci:
B
color : 3
speed : 60
A
color : 2
speed : 70
J'ai juste commencé à apprendre les dictionnaires, alors je ne sais pas comment faire.
for x in cars:
print (x)
for y in cars[x]:
print (y,':',cars[x][y])
sortie:
A
color : 2
speed : 70
B
color : 3
speed : 60
Une solution plus généralisée prenant en charge les dict et les listes imbriqués de manière arbitraire-profonde serait la suivante:
def dumpclean(obj):
if type(obj) == dict:
for k, v in obj.items():
if hasattr(v, '__iter__'):
print k
dumpclean(v)
else:
print '%s : %s' % (k, v)
Elif type(obj) == list:
for v in obj:
if hasattr(v, '__iter__'):
dumpclean(v)
else:
print v
else:
print obj
Cela produit la sortie:
A
color : 2
speed : 70
B
color : 3
speed : 60
J'ai rencontré un besoin similaire et développé une fonction plus robuste en tant qu'exercice pour moi-même. Je l'inclue ici au cas où cela pourrait être utile à un autre. En exécutant nosetest, j'ai également trouvé utile de pouvoir spécifier le flux de sortie dans l'appel afin que sys.stderr puisse être utilisé à la place.
import sys
def dump(obj, nested_level=0, output=sys.stdout):
spacing = ' '
if type(obj) == dict:
print >> output, '%s{' % ((nested_level) * spacing)
for k, v in obj.items():
if hasattr(v, '__iter__'):
print >> output, '%s%s:' % ((nested_level + 1) * spacing, k)
dump(v, nested_level + 1, output)
else:
print >> output, '%s%s: %s' % ((nested_level + 1) * spacing, k, v)
print >> output, '%s}' % (nested_level * spacing)
Elif type(obj) == list:
print >> output, '%s[' % ((nested_level) * spacing)
for v in obj:
if hasattr(v, '__iter__'):
dump(v, nested_level + 1, output)
else:
print >> output, '%s%s' % ((nested_level + 1) * spacing, v)
print >> output, '%s]' % ((nested_level) * spacing)
else:
print >> output, '%s%s' % (nested_level * spacing, obj)
En utilisant cette fonction, la sortie de l'OP ressemble à ceci:
{
A:
{
color: 2
speed: 70
}
B:
{
color: 3
speed: 60
}
}
que j’ai personnellement trouvé plus utile et descriptif.
Étant donné l'exemple légèrement moins trivial de:
{"test": [{1:3}], "test2":[(1,2),(3,4)],"test3": {(1,2):['abc', 'def', 'ghi'],(4,5):'def'}}
La solution demandée par le PO donne ceci:
test
1 : 3
test3
(1, 2)
abc
def
ghi
(4, 5) : def
test2
(1, 2)
(3, 4)
alors que la version "améliorée" donne ceci:
{
test:
[
{
1: 3
}
]
test3:
{
(1, 2):
[
abc
def
ghi
]
(4, 5): def
}
test2:
[
(1, 2)
(3, 4)
]
}
J'espère que cela apportera de la valeur à la prochaine personne à la recherche de ce type de fonctionnalité.
Vous pouvez utiliser le module json
pour cela. La fonction dumps
de ce module convertit un objet JSON en une chaîne correctement formatée que vous pouvez ensuite imprimer.
import json
cars = {'A':{'speed':70, 'color':2},
'B':{'speed':60, 'color':3}}
print(json.dumps(cars, indent = 4))
La sortie ressemble à
{ "UNE": { "couleur": 2, "vitesse": 70 }, "B": { "couleur": 3, "vitesse": 60 } }
La documentation spécifie également de nombreuses options utiles pour cette méthode.
Vous avez une structure imbriquée, vous devez donc également formater le dictionnaire imbriqué:
for key, car in cars.items():
print(key)
for attribute, value in car.items():
print('{} : {}'.format(attribute, value))
Cela imprime:
A
color : 2
speed : 70
B
color : 3
speed : 60
Comme l'a mentionné Martijn Pieters dans l'un des commentaires ci-dessus, PrettyPrint est un bon outil pour ce travail:
>>> import pprint
>>> cars = {'A':{'speed':70,
... 'color':2},
... 'B':{'speed':60,
... 'color':3}}
>>> pprint.pprint(cars, width=1)
{'A': {'color': 2,
'speed': 70},
'B': {'color': 3,
'speed': 60}}
for car,info in cars.items():
print(car)
for key,value in info.items():
print(key, ":", value)
Cela fonctionnera si vous savez que l'arbre n'a que deux niveaux:
for k1 in cars:
print(k1)
d = cars[k1]
for k2 in d
print(k2, ':', d[k2])
Vérifiez le one-liner suivant:
print('\n'.join("%s\n%s" % (key1,('\n'.join("%s : %r" % (key2,val2) for (key2,val2) in val1.items()))) for (key1,val1) in cars.items()))
Sortie:
A
speed : 70
color : 2
B
speed : 60
color : 3
# Declare and Initialize Map
map = {}
map ["New"] = 1
map ["to"] = 1
map ["Python"] = 5
map ["or"] = 2
# Print Statement
for i in map:
print ("", i, ":", map[i])
# New : 1
# to : 1
# Python : 5
# or : 2
###newbie exact answer desired (Python v3):
###=================================
"""
cars = {'A':{'speed':70,
'color':2},
'B':{'speed':60,
'color':3}}
"""
for keys, values in reversed(sorted(cars.items())):
print(keys)
for keys,values in sorted(values.items()):
print(keys," : ", values)
"""
Output:
B
color : 3
speed : 60
A
color : 2
speed : 70
##[Finished in 0.073s]
"""