如何使用 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 中访问(您需要将它保留在那里才能打印它)
我正在尝试改进下面的代码段。我尝试了一些修改,但无法创建所需的输出。需要修改哪一部分才能得到我想要的输出?提前致谢。
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 中访问(您需要将它保留在那里才能打印它)