f1 = open("leader")
lines = f1.readlines()
lines.sort(key=int, reverse=True)
f1.close()
print(lines)
具有外部文件值:
345345:player7
435:zo
345:name
23:hello
1231:football
这是对它们进行排序,以便对整数进行排序,而不对名称进行排序
答案 0 :(得分:4)
IIUC:
l = ['345345:player7',
'435:zo',
'345:name',
'23:hello',
'1231:football']
sorted(l, key=lambda x: int(x.split(':')[0]))
输出:
['23:hello', '345:name', '435:zo', '1231:football', '345345:player7']
答案 1 :(得分:4)
排序键应该执行:“拆分一次,转换为整数”。不转换为整数失败,因为然后使用了字典比较,在这种情况下使用"10" < "2"
,而不是您想要的。
l = ['345345:player7',
'435:zo',
'345:name',
'23:hello',
'1231:football']
result = sorted(l, key=lambda x: int(x.split(':',1)[0]))
结果:
['23:hello', '345:name', '435:zo', '1231:football', '345345:player7']
不能处理数字相等的决胜局。需要一个稍微复杂些的排序键(但仍然可行)。在这种情况下,请放下lambda
并创建一个实函数,以便您可以执行一次分割和解压,仅将第一部分转换为整数:
def sortfunc(x):
number,rest = x.split(':',1)
return int(number),rest
result = sorted(l, key=sortfunc)
答案 2 :(得分:0)
尝试一下: (如果您仍在从文件中读取信息,将很有帮助)
with open('leader.txt', mode = 'r') as f1:
data = f1.readlines()
# end with
keys = {}
output = []
for s in data:
num, value = s.split(sep=':')
if keys.get(int(num), False):
keys[int(num)].append(value)
else:
keys[int(num)] = [value]
for num in sorted(keys):
for i in keys[num]:
output.append((num, i))
for num, value in output:
print(f'{num}: {value}')