Python3:排序字典键列表

时间:2014-04-09 17:03:51

标签: python list sorting python-3.x dictionary

我有一个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所示)?

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)