Python3:排序字典键的列表
我有760个文件的列表,从中提取了2行数据,然后把这些数据存储在一个字典里:
output = {'文件编号':data, '1':某些数据1, '2':某些数据2, ... '760':某些数据760}
注意:
这些编号是字符串,因为我通过执行os.listdir('.')来获取文件名列表,并对字符串进行了拆分。[如果需要,我可以把它们转换成整数(使用int()
)]
然后通过创建一个键的列表并进行遍历来打印这个字典:
keys = output.keys()
for x in keys:
print(x, '\t', output[x])
但是输出的顺序是随机的[因为字典本身是无序的,这似乎是它的一个固有特性——虽然我不知道为什么会这样],如果输出能按照文件编号的数字顺序排列,那就方便多了。那么,这就引出了一个问题:
考虑到我的键列表要么是
1.keys = ['文件名', '2', '555', '764' ... '10']
或者,如果我把文件编号的字符串改成整数:
2.keys = ['文件名', 2, 555, 764 ... 10]
我该如何根据文件编号的数值来对我的键列表进行排序,如果它是字符串(如上面1所示),或者如果它是混合类型(即1个字符串和760个整数,如上面2所示)?
2 个回答
0
只需把你的列表放到另一个变量里,然后执行下面的语句,就能得到正确的输出:
listofdict = [{'key': value1,'key': value2,.......}]
output = listofdict[::-1]
print(output)
3
你可以给 sorted()
函数添加一个关键字参数:
sorted(output, key=lambda k: int(k) if k.isdigit() else float('-inf'))
这样的话,字符串会被排在数字之前。不过要注意,不需要调用 dict.keys()
;因为遍历一个字典时,已经会得到一系列的键,所以直接在字典上调用 sorted()
就可以了。
在 Python 3 中,字符串和数字比较时并没有定义排序规则,所以对于任何不是数字的键,都会返回 float('-inf')
(负无穷大),这样至少可以把这些键放在排序的最前面。
示例:
>>> sorted(keys, key=lambda k: int(k) if k.isdigit() else float('-inf'))
['filename', '2', '10', '555', '764']