如何使用Python对以数字文件名作为键的JSON文件名进行排序?

时间:2018-07-06 13:04:27

标签: python json sorting

我有一个JSON文件,其中包含文件名和每个键值对的描述。但是当我尝试对文件排序时使用OrderedDict会导致顺序 0.jpg 1.jpg 10.jpg 11 ..... 2 20 等等。

op={int(k) : v for k, v in output.items()}

我尝试这样做,但是它返回ValueError。 错误如下

ValueError:以10为底的int()无效文字:'1520.png'

2 个答案:

答案 0 :(得分:2)

SourceContext

示例

OrderedDict(sorted(output.items(), key=lambda item: int(item[0].split('.')[0])))

输出:

output = {f'{i}.jpg': None for i in reversed(range(21))}

od = OrderedDict(sorted(output.items(), key=lambda item: int(item[0].split('.')[0])))

答案 1 :(得分:0)

您要在不完全由数字组成的字符串上调用int()函数。您构建的字典理解将遍历原始字典output中的每个键/值对,并尝试将每个键转换为整数。

在您的示例中,键是文件名,例如“ 0.png”,“ 1.jpg”,“ 10.png”等,并且字符串'10.png'不能输入整数。这就是为什么您得到ValueError的原因。

在Python中对字典进行排序有点棘手,因为我们认为实际上Python应该根据其哈希值对字典键进行排序时,所有内容都应基于键的值。

至于使用OrderedDict,该容器仅记住键的插入顺序。听起来像它可以为您提供一些排序功能,但它只能保证通过键循环的顺序与将其放入字典的顺序相同。

这应该可以帮助您

od = OrderedDict()
for key in sorted(output):
    od[key] = output[key]

这会将原始字典output的所有键放在一个列表中,对其进行排序,然后将每个字典按正确的值按顺序排列在OrderedDict中。