3 回答

TA貢獻1895條經驗 獲得超7個贊
如果將您的 dict 更簡化為:
dirs = {
'/root/git/dir1/1234': 10,
'/root/git/dir1/cece': 0,
'/root/git/dir1/dir11': 7,
'/root/git/dir1/dir13': 7,
'/root/git/dir1/dir14': 11,
'/root/git/dir1/dir15': 12,
'/root/git/dir1/dir16': 0,
'/root/git/dir1/dir17': 0,
'/root/git/dir1/dir18': 0,
'/root/git/dir1/jaja': 0,
'/root/git/dir1/ola1': 0}
然后您可以按數字排序打印它:
print('{' + ',\n'.join(
'\'{}\': {}'.format(x, y) for x, y in sorted(
dirs.items(), key=lambda x: x[1])) + '}')
輸出:
{'/root/git/dir1/ola1': 0,
'/root/git/dir1/cece': 0,
'/root/git/dir1/dir18': 0,
'/root/git/dir1/dir17': 0,
'/root/git/dir1/jaja': 0,
'/root/git/dir1/dir16': 0,
'/root/git/dir1/dir11': 7,
'/root/git/dir1/dir13': 7,
'/root/git/dir1/1234': 10,
'/root/git/dir1/dir14': 11,
'/root/git/dir1/dir15': 12}

TA貢獻1775條經驗 獲得超8個贊
我認為問題在于您使用的數據結構!
默認情況下,python 中的字典沒有稱為排序的功能。因此,您需要考慮替代方案。
解決這個問題的方法之一是使用元組列表。
為什么是元組列表?
元組列表可以在必要時輕松轉換為 dict。例如,
>>> list_of_tuples = [('a', 'b'), ('c', 'd')]
>>> a_dict = dict(list_of_tuples)
>>> a_dict
{'a': 'b', 'c': 'd'}
現在,由于您的數據是 dict 格式,您需要將其轉換為可以使用 dict.items() 方法完成的元組列表。就是這樣
>>> a_dict.items()
dict_items([('a', 'b'), ('c', 'd')])
>>> list(a_dict.items())
[('a', 'b'), ('c', 'd')]
結果與 完全相同list_of_tuples。請記住,dict 類型對象的鍵應該始終是不可變的數據類型。
現在,回到你的問題,
我嘗試使用排序函數,但一直收到此錯誤: orden = sorted(['dirs'], key = lambda x: x['Num_Subdir']) 錯誤: TypeError: string indices must be integers
您在 x 中獲得的值是一個字符串,而不是一個 dict 類型的對象。因此,TypeError.
獲取編輯結果:
data_dict = {k: {v['Path']: v['Num_Subdir']} for k, v in d['Subdir'].items()}
更改為建議的數據結構
data = [(k, (v['Path'], v['Num_Subdir'])) for k, v in d['Subdir'].items()]
按路徑排序
data.sort(key=lambda item: item[1][0], reverse=False)
按 Num_Subdir 排序
data.sort(key=lambda item: item[1][1], reverse=False)
按子目錄名稱排序
data.sort(key=lambda item: item[0], reverse=False) # reverse=True for descending order

TA貢獻1848條經驗 獲得超10個贊
希望這可以幫助...
試試 OrderedDict,這是非常有用的一個,
>>>from collections import OrderedDict
>>>final_response1 = OrderedDict(sorted(dirs['Subdir']['1234']['Subdir'].items(),key=lambda t: t[0]))
#In the above these were the reference that you have stored **"dirs['Subdir']['1234']['Subdir'].items()"**
現在您將獲得已排序的項目。
添加回答
舉報