我有一个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'
答案 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中。