簡體   English   中英

如何使用Python對以數字文件名作為鍵的JSON文件名進行排序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM