Используйте def для печати большого количества значений

У меня есть такая форма

a={'vladimirputin': {'milk': 2.87, 'parsley': 1.33, 'bread': 0.66}, 
'barakobama': {'parsley': 0.76, 'sugar': 1.98, 'crisps': 1.09, 
'potatoes': 2.67, 'cereal': 9.21}}

и я хочу так трансформироваться

milk 
---- 
 vladimirputin: 2.87 

cereal 
------ 
 barakobama: 9.21 

bread 
----- 
 vladimirputin: 0.66 

potatoes 
-------- 
 barakobama: 2.67 

sugar 
----- 
 barakobama: 1.98 

parsley 
------- 
 vladimirputin: 1.33 barakobama: 0.76 

crisps 
------ 
 barakobama: 1.09

но, используя def, я не знаю, как представить так много значений только с одним def. Все необходимые значения вычисляются, но я не знаю, как их использовать.

Это мой прогресс до сих пор

for key in d.keys():
 print(key)
 length=len(key)
 print(length)
 products=d[key]
 for price in products.values():
 for name,valuen in products.items():
 if valuen == price:
 print("\t",name,":",price,end="\t")
 print("\n")
2 ответа

dictYou можете сделать это также:

def get_invert_dict(dict):
 {c:{key:v} for key,value in a.iteritems() for c,v in value.iteritems()}

#Test the function
new_dict = get_invert_dict(a)
print(new_dict)

Изменение: не работает, если несколько значений для одного и того же ключа (например: persil). Последний используется как значение


Этот ответ основывается на моем ответе на ваш предыдущий вопрос. После получения b перевернутый словарь, как объяснялось в моем предыдущем ответе, вы можете получить свой результат с помощью этого кода:

def print_data(b):
 for key, value in b.items():
 print key
 print '-' * len(key)
 for k, v in value.items():
 print ' {}: {}'.format(k, v),
 print '\n'

Это дает:

cereal
------
 barakobama: 9.21

potatoes
--------
 barakobama: 2.67

parsley
-------
 vladimirputin: 1.33 barakobama: 0.76

sugar
-----
 barakobama: 1.98

crisps
------
 barakobama: 1.09

milk
----
 vladimirputin: 2.87

bread
-----
 vladimirputin: 0.66

Обратите внимание, что порядок продуктов питания в ожидаемом выпуске и мой ответ не совпадают. Это связано с тем, что словари не упорядочены по умолчанию. Возможно, вам потребуется изучить OrderedDicts, если порядок элементов является проблемой.

Документация по format()

licensed under cc by-sa 3.0 with attribution.