使用def打印大量值

2024-06-16 16:06:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张这样的表格

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,我不知道如何用一个值来表示这么多的值定义所有必要的数值是计算出来的,但我不知道如何使用它们。你知道吗

这是我到现在为止的进步

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

Tags: keyinforsugarpriceproductsprintmilk
2条回答

这个答案取决于我对你上一个问题的回答。在获得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。你知道吗

关于^{}的文档

您也可以这样做:

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

相关问题 更多 >