Dies ist das Wörterbuch
cars = {'A':{'speed':70,
'color':2},
'B':{'speed':60,
'color':3}}
Verwendung dieses for loop
for keys,values in cars.items():
print(keys)
print(values)
Es druckt Folgendes:
B
{'color': 3, 'speed': 60}
A
{'color': 2, 'speed': 70}
Aber ich möchte, dass das Programm es so druckt:
B
color : 3
speed : 60
A
color : 2
speed : 70
Ich habe gerade angefangen, Wörterbücher zu lernen, also bin ich mir nicht sicher, wie ich das machen soll.
for x in cars:
print (x)
for y in cars[x]:
print (y,':',cars[x][y])
ausgabe:
A
color : 2
speed : 70
B
color : 3
speed : 60
Eine allgemeinere Lösung, die mit beliebig tief verschachtelten Diktaten und Listen umgehen kann, wäre:
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
Dies erzeugt die Ausgabe:
A
color : 2
speed : 70
B
color : 3
speed : 60
Ich hatte ein ähnliches Bedürfnis und entwickelte eine robustere Funktion als Übung für mich. Ich füge es hier ein, falls es für einen anderen von Wert sein kann. Beim Ausführen von nosetest war es auch hilfreich, den Ausgabestrom im Aufruf angeben zu können, sodass stattdessen sys.stderr verwendet werden konnte.
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)
Mit dieser Funktion sieht die Ausgabe des OP folgendermaßen aus:
{
A:
{
color: 2
speed: 70
}
B:
{
color: 3
speed: 60
}
}
was ich persönlich nützlicher und beschreibender fand.
Angesichts des etwas weniger trivialen Beispiels von:
{"test": [{1:3}], "test2":[(1,2),(3,4)],"test3": {(1,2):['abc', 'def', 'ghi'],(4,5):'def'}}
Die vom OP geforderte Lösung führt dazu:
test
1 : 3
test3
(1, 2)
abc
def
ghi
(4, 5) : def
test2
(1, 2)
(3, 4)
während die "verbesserte" Version dies ergibt:
{
test:
[
{
1: 3
}
]
test3:
{
(1, 2):
[
abc
def
ghi
]
(4, 5): def
}
test2:
[
(1, 2)
(3, 4)
]
}
Ich hoffe, dass dies der nächsten Person, die nach dieser Art von Funktionalität sucht, einen gewissen Wert bietet.
Sie können dazu das Modul json
verwenden. Die Funktion dumps
in diesem Modul konvertiert ein JSON-Objekt in eine ordnungsgemäß formatierte Zeichenfolge, die Sie dann drucken können.
import json
cars = {'A':{'speed':70, 'color':2},
'B':{'speed':60, 'color':3}}
print(json.dumps(cars, indent = 4))
Die Ausgabe sieht so aus
{ "EIN": { "Farbe": 2, "Geschwindigkeit": 70 }, "B": { "Farbe": 3, "Geschwindigkeit": 60 } }
Die documentation gibt auch eine Reihe nützlicher Optionen für diese Methode an.
Sie haben eine verschachtelte Struktur, daher müssen Sie auch das verschachtelte Wörterbuch formatieren:
for key, car in cars.items():
print(key)
for attribute, value in car.items():
print('{} : {}'.format(attribute, value))
Dies druckt:
A
color : 2
speed : 70
B
color : 3
speed : 60
Wie Martijn Pieters in einem der obigen Kommentare erwähnt hat, ist PrettyPrint ein gutes Werkzeug für diesen Job:
>>> 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)
Dies funktioniert, wenn Sie wissen, dass der Baum nur zwei Ebenen hat:
for k1 in cars:
print(k1)
d = cars[k1]
for k2 in d
print(k2, ':', d[k2])
Überprüfen Sie den folgenden Einliner:
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()))
Ausgabe:
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]
"""