打印FormatList问题

时间:2015-12-05 22:35:19

标签: python list printing format

我现在只是有一个小问题格式。我当前的代码以一种不稳定的方式打印出来,我试图让它看起来更顺畅。如何更改打印格式?

height = {}

length = len(preys)
rank = 0
while preys != [None]*length:
    for index,(animal,prey) in enumerate(zip(animals,preys)):
        if prey not in animals:
            try:
                if height[prey] < rank:
                    height[prey] = rank
            except KeyError:
                height[prey] = 0

            height[animal] = height[prey] + 1

            preys[index] = None
            animals[index] = None
    rank += 1
for arg in sys.argv:
    print (sorted (height.items(),key = lambda x:x[1],reverse=True))

如果名称 ==“主要”:     main()的

输出如下:

[('Lobster',4),('Bird',4),('Fish',3),('Whelk',3),('Crab',3),('Mussels',2 ),('Prawn',2),('Zooplankton',1),('Limpets',1),('Phytoplankton',0),('Seaweed',0)]

我想让它看起来像:

Heights:
Bird: 4
Crab: 3
Fish: 3
Limpets: 1
Lobster: 4
Mussels: 2
Phytoplankton: 0
Prawn: 2
Seaweed: 0
Whelk: 3
Zooplankton: 1

我试图使用:print(formatList(height))格式,然而在“height”导致错误之前打印任何内容

2 个答案:

答案 0 :(得分:0)

由于输出只打印一次,我们知道sys.argv没有传递任何额外的参数。没有必要创建一个只执行一次的循环(如果有多个参数,通常多次打印相同的输出通常没用)。相反,循环遍历height对象本身。

当您显然想要按键排序时,您当前也按值排序。由于后者无论如何都是默认排序,我不知道你为什么要添加(杂乱)代码来按值排序。

使用字符串格式表示每个项目所需的外观。

print('Heights:')
for item in sorted(height.items()):
    print('{}: {}'.format(*item))

请注意,排序可迭代的tuple个对象将首先按第一个元素排序,然后,如果有两个tuple具有相同的第一个项目,则它们将按第二个元素排序。例如,('Bird', 1)将出现在('Bird', 2)之前。由于字典不能有重复的密钥,这在这里不是问题,但要记住这一点。

答案 1 :(得分:-1)

我认为你可以尝试这样的事情:

sorted_ list = sorted (height.items(),key = lambda x:x[1],reverse=True)
print(''.join('%s : %s\n' % x for x in sorted_list))

或者在一个表达式中(如果它对你来说不丑):

print(''.join('%s : %s\n' % x 
              for x in sorted (height.items(),key = lambda x:x[1],reverse=True)))