使用def来打印很多值

时间:2014-04-30 18:54:11

标签: python dictionary printing key definition

我有一个这样的表格

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 个答案:

答案 0 :(得分:0)

这个答案取决于我对你上一个问题的回答。获得b之后,倒置字典,如我之前的answer中所述,您可以使用以下代码获取输出:

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

上的文档

答案 1 :(得分:0)

你也可以这样做:

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)不起作用。最后一个用作值