This is the dictionary

cars = {'A':{'speed':70, 'color':2}, 'B':{'speed':60, 'color':3}} 

Using this for loop

for keys,values in cars.items(): print(keys) print(values) 

It prints the following:

B {'color': 3, 'speed': 60} A {'color': 2, 'speed': 70} 

But I want the program to print it like this:

B color : 3 speed : 60 A color : 2 speed : 70 

I just started learning dictionaries so I'm not sure how to do this.

15 Answers

for x in cars: print (x) for y in cars[x]: print (y,':',cars[x][y]) 

output:

A color : 2 speed : 70 B color : 3 speed : 60 
4

You could use the json module for this. The dumps function in this module converts a JSON object into a properly formatted string which you can then print.

import json cars = {'A':{'speed':70, 'color':2}, 'B':{'speed':60, 'color':3}} print(json.dumps(cars, indent = 4)) 

The output looks like

{ "A": { "color": 2, "speed": 70 }, "B": { "color": 3, "speed": 60 } } 

The documentation also specifies a bunch of useful options for this method.

2

A more generalized solution that handles arbitrarily-deeply nested dicts and lists would be:

def dumpclean(obj): if isinstance(obj, dict): for k, v in obj.items(): if hasattr(v, '__iter__'): print k dumpclean(v) else: print '%s : %s' % (k, v) elif isinstance(obj, list): for v in obj: if hasattr(v, '__iter__'): dumpclean(v) else: print v else: print obj 

This produces the output:

A color : 2 speed : 70 B color : 3 speed : 60 

I ran into a similar need and developed a more robust function as an exercise for myself. I'm including it here in case it can be of value to another. In running nosetest, I also found it helpful to be able to specify the output stream in the call so that sys.stderr could be used instead.

import sys def dump(obj, nested_level=0, output=sys.stdout): spacing = ' ' if isinstance(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 isinstance(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) 

Using this function, the OP's output looks like this:

{ A: { color: 2 speed: 70 } B: { color: 3 speed: 60 } } 

which I personally found to be more useful and descriptive.

Given the slightly less-trivial example of:

{"test": [{1:3}], "test2":[(1,2),(3,4)],"test3": {(1,2):['abc', 'def', 'ghi'],(4,5):'def'}} 

The OP's requested solution yields this:

test 1 : 3 test3 (1, 2) abc def ghi (4, 5) : def test2 (1, 2) (3, 4) 

whereas the 'enhanced' version yields this:

{ test: [ { 1: 3 } ] test3: { (1, 2): [ abc def ghi ] (4, 5): def } test2: [ (1, 2) (3, 4) ] } 

I hope this provides some value to the next person looking for this type of functionality.

3

pprint.pprint() is a good tool for this 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}} 
1

You have a nested structure, so you need to format the nested dictionary too:

for key, car in cars.items(): print(key) for attribute, value in car.items(): print('{} : {}'.format(attribute, value)) 

This prints:

A color : 2 speed : 70 B color : 3 speed : 60 

I prefer the clean formatting of yaml:

import yaml print(yaml.dump(cars)) 

output:

A: color: 2 speed: 70 B: color: 3 speed: 60 
3
for car,info in cars.items(): print(car) for key,value in info.items(): print(key, ":", value) 

This will work if you know the tree only has two levels:

for k1 in cars: print(k1) d = cars[k1] for k2 in d print(k2, ':', d[k2]) 

Check the following one-liner:

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())) 

Output:

A speed : 70 color : 2 B speed : 60 color : 3 
1

Here is my solution to the problem. I think it's similar in approach, but a little simpler than some of the other answers. It also allows for an arbitrary number of sub-dictionaries and seems to work for any datatype (I even tested it on a dictionary which had functions as values):

def pprint(web, level): for k,v in web.items(): if isinstance(v, dict): print('\t'*level, f'{k}: ') level += 1 pprint(v, level) level -= 1 else: print('\t'*level, k, ": ", v) 
1
###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] """ 
# 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 

Use this.

cars = {'A':{'speed':70, 'color':2}, 'B':{'speed':60, 'color':3}} print(str(cars).replace(",", ",\n")) 

output:

{'A': {'speed': 70, 'color': 2}, 'B': {'speed': 60, 'color': 3}} 

I think list comprehension is the cleanest way to do this:

mydict = {a:1, b:2, c:3} [(print("key:", key, end='\t'), print('value:', value)) for key, value in mydict.items()] 

Modifying MrWonderful code

import sys def print_dictionary(obj, ident): if type(obj) == dict: for k, v in obj.items(): sys.stdout.write(ident) if hasattr(v, '__iter__'): print k print_dictionary(v, ident + ' ') else: print '%s : %s' % (k, v) elif type(obj) == list: for v in obj: sys.stdout.write(ident) if hasattr(v, '__iter__'): print_dictionary(v, ident + ' ') else: print v else: print obj 
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy