[英]How do I sort a JSON file name that has numeric file names as the key using Python?
我有一個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'
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])))
OrderedDict([('0.jpg', None),
('1.jpg', None),
('2.jpg', None),
('3.jpg', None),
('4.jpg', None),
('5.jpg', None),
('6.jpg', None),
('7.jpg', None),
('8.jpg', None),
('9.jpg', None),
('10.jpg', None),
('11.jpg', None),
('12.jpg', None),
('13.jpg', None),
('14.jpg', None),
('15.jpg', None),
('16.jpg', None),
('17.jpg', None),
('18.jpg', None),
('19.jpg', None),
('20.jpg', None)])
您正在對不完全由數字組成的字符串調用int()
函數。 您構建的字典理解將遍歷原始dict output
中的每個鍵/值對,並嘗試將每個鍵轉換為整數。
在你的榜樣鍵是像“0.png”,“1.JPG”,“10.png”等,像一個字符串的文件名'10.png'
不能打開到一個整數。 這就是為什么要獲取ValueError
的原因。
在Python中對字典進行排序有點棘手,因為我們認為實際上Python應該根據其哈希值對字典鍵進行排序時,所有內容都應基於鍵的值。
至於使用OrderedDict,該容器僅記住鍵的插入順序。 聽起來它會為您提供一些排序功能,但只能保證循環瀏覽鍵的順序與將其放入字典的順序相同。
這應該可以幫助您:
od = OrderedDict()
for key in sorted(output):
od[key] = output[key]
這會將原始dict output
所有鍵放在一個列表中,對其進行排序,然后以正確的值按OrderedDict中的排序順序粘貼每個鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.