打印格式列表问题

2024-07-05 09:09:47 发布

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

我现在只是有个格式化的小问题。我当前的代码以一种不稳定的方式打印出我的代码,我正在努力使它看起来更平滑。如何更改打印格式

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”: 主()


输出如下所示:

[(‘龙虾’,4)、(‘鸟’,4)、(‘鱼’,3)、(‘青春痘’,3)、(‘螃蟹’,3)、(‘贻贝’,2)、(‘对虾’,2)、(‘浮游动物’,1)、(‘帽贝’,1)、(‘浮游植物’,0)、(‘海藻’,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”之前打印任何内容都会导致错误


Tags: 代码innoneforindexif格式length
2条回答

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

您当前也在按值排序,显然您希望按键排序。由于后者是默认的排序方式,我不知道为什么要添加(凌乱的)代码来按值排序

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

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

请注意,对tuple对象的iterable排序将首先按第一个元素排序,然后,如果有两个tuple具有相同的第一项,则将按第二个元素排序。例如,('Bird', 1)将出现在('Bird', 2)之前。因为字典不能有重复的键,所以这在这里不是问题,但是要记住

我想你可以试试这样:

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

相关问题 更多 >