我现在只是有一个小问题格式。我当前的代码以一种不稳定的方式打印出来,我试图让它看起来更顺畅。如何更改打印格式?
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”导致错误之前打印任何内容
答案 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)))