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()"**
现在您将获得已排序的项目。
添加回答
举报