Python排序嵌套字典

Python排序嵌套字典,python,dictionary,Python,Dictionary,我想对这本嵌套字典进行两次排序。首先,我想按时间排序,然后按键排序。这是一本嵌套字典。时间应该首先被过滤,然后被内部字典的键(“FileNameXXX”)过滤 data={1:{“05:00:00”:{“FileName123”:“LineString1”}, 2:{“16:00:00”:{“FileName456”:“LineString2”}, 3:{“07:00:00”:{“FileName789”:“LineString3”}, 4:{“07:00:00”:{“FileName555”:

我想对这本嵌套字典进行两次排序。首先,我想按时间排序,然后按键排序。这是一本嵌套字典。时间应该首先被过滤,然后被内部字典的键(“FileNameXXX”)过滤

data={1:{“05:00:00”:{“FileName123”:“LineString1”},
2:{“16:00:00”:{“FileName456”:“LineString2”},
3:{“07:00:00”:{“FileName789”:“LineString3”},
4:{“07:00:00”:{“FileName555”:“LineString4”}}
预期结果:
您可以通过为数据中的每个条目建立一些价值概念来实现这一点。例如,我在下面的函数中定义了一个数据项的“值”,但请注意,它在很大程度上依赖于在第二个嵌套dict中有一个键,而第二个嵌套dict也必须严格按照字符串的时间格式

def get_compariable(键):
原始时间=列表(数据[key].key())[0]
time=datetime.strtime(原始时间,“%H:%M:%S”).time()
返回时间.小时*3600+时间.分钟*60+时间.秒+键*0.001
您可以使用以下选项:

排序中k的
(数据,键=获取可比较):
打印(k,数据[k])
输出:

使用

排序(数据,key=lambda x:list(数据[x].keys())[0])
将产生相同的输出,但请注意,它不会考虑第一级键(数字)的值,并且会按字典顺序对时间进行排序。

如果按键排序,则可能会重复,为什么
FileName789
出现在
FileName555
之前?这不是重复。
1: {"05:00:00": {"FileName123": "LineString1"}}
3: {"07:00:00": {"FileName789": "LineString3"}}
4: {"07:00:00": {"FileName555": "LineString4"}}
2: {"16:00:00": {"FileName456": "LineString2"}}
1 {'05:00:00': {'FileName123': 'LineString1'}}
3 {'07:00:00': {'FileName789': 'LineString3'}}
4 {'07:00:00': {'FileName555': 'LineString4'}}
2 {'16:00:00': {'FileName456': 'LineString2'}}