我有一个760个文件的列表,我从中提取2行数据,然后存储在字典中:
output = {'file number':data, '1':somedatain1, '2':somedatain2, ... '760':somedatain760}
N.B。
数字是字符串,因为它们是通过执行os.listdir('。')获得的,以便获取文件名列表并将字符串拆分。 [如果需要,我可以将其转换为整数(using int()
)
然后通过创建键列表并迭代来打印字典:
keys = output.keys()
for x in keys:
print(x, '\t', output[x])
然而输出是随机顺序的[因为字典的无序性质,我认为,这是一个固有的属性 - 虽然我不知道为什么会这样],如果这样做会更方便输出按文件编号按数字顺序排列。然后,这引发了一个问题:
鉴于我的密钥列表是
1。keys = ['filename', '2', '555', '764' ... '10']
或者,如果我将文件编号的字符串更改为整数:
2. keys = ['filename', 2, 555, 764 ... 10]
如果是字符串(如上面的1.所示),或者它是混合对象类型(即1个字符串和760),我如何根据文件编号的数值对我的密钥列表进行排序?整数如上面2所示)?
答案 0 :(得分: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']
答案 1 :(得分:0)
只需将列表添加到另一个变量中,然后按照以下语句获得正确的输出即可:
listofdict = [{'key': value1,'key': value2,.......}]
output = listofdict[::-1]
print(output)