如何使用 lambda 显示排序行数据的缺失部分

How to display the missing part of a sorted line data using lambda

我正在尝试改进下面的代码段。我尝试了一些修改,但无法创建所需的输出。需要修改哪一部分才能得到我想要的输出?提前致谢。

from collections import defaultdict

data=defaultdict(int)
num = 0
with open("Samplefile.txt", encoding='utf8', errors='ignore') as f:
    for line in f:
        grp, pname, cnt, cat = line.split(maxsplit=3)
        data[(pname.strip(),cat.replace('\n','').strip(),grp)]+=int(cnt)
        
sorteddata = sorted([[k[0],v,k[2]] for k,v in data.items()], key=lambda x:x[1], reverse=True)

for subl in sorteddata[:10]:
    num += 1
    line = " ".join(map(str, subl))
    print ("{:>5}  -> {:<5}".format(str(num), line))

Samplefile.txt

  113   b6320070eb6998e64d2d6573fc  4  Yorkie (YORK)
2,887   0953f9e6608d6604e4676ac5b7  3  Fins LPs (FINS-L...)
  122   74c33cff9ff98f3a9b62fcbff5  3  Fins Token (FINS)
  128   f9fa0a842465d9a2f5f9fd1423  2  Numbers One (NUM)
1,272   4230cbfda057d8ec2c48abe2a2  2  USDC (anyUSD...)

当前输出:#

1  -> b6320070eb6998e64d2d6573fc 4 113
2  -> 0953f9e6608d6604e4676ac5b7 3 2,887
3  -> 74c33cff9ff98f3a9b62fcbff5 3 122
4  -> f9fa0a842465d9a2f5f9fd1423 2 128
5  -> 4230cbfda057d8ec2c48abe2a2 2 1,272

想要的输出:

1  ->   113   b6320070eb6998e64d2d6573fc   4   Yorkie (YORK)
2  -> 2,887   0953f9e6608d6604e4676ac5b7   3   Fins LPs (FINS-L...)
3  ->   122   74c33cff9ff98f3a9b62fcbff5   3   Fins Token (FINS)
4  ->   128   f9fa0a842465d9a2f5f9fd1423   2   Numbers One (NUM)
5  -> 1,272   4230cbfda057d8ec2c48abe2a2   2   USDC (anyUSD...)

您的 sortedData 列表,重新组织了键和值的内容。您必须在打印格式中考虑到这一点:

for num,(k0,v,k2) in enumerate(sorteddata[:10],1):
     print(f"{num:5} -> {k2:>5} {k0} {v}")

不过,这不会打印最后一部分(例如 'Yorkie (YORK)'),因为您已将它从排序列表中完全删除,所以它不再可以在 sortedData 中访问(您需要将它保留在那里才能打印它)