重新排序并返回整个嵌套字典

时间:2018-12-10 23:01:10

标签: python dictionary-comprehension

我正在尝试保留嵌套字典的全部内容,但只保留其内容重新排序。.

这是我的嵌套词典的一个示例(请原谅冗长的示例..)-

{
    "pages": {
        "rotatingTest": {
            "elements": {
                "apvfafwkbnjn2bjt": {
                    "name": "animRot_tilt40_v001", 
                    "data": {
                        "description": "tilt testing", 
                        "project": "TEST", 
                        "created": "26/11/18 16:32", 
                    }, 
                    "type": "AnimWidget", 
                    "uid": "apvfafwkbnjn2bjt"
                }, 
                "p0pkje1hjcc9jukq": {
                    "name": "poseRot_positionD_v003", 
                    "data": {
                        "description": "posing test for positionD", 
                        "created": "10/01/18 14:16", 
                        "project": "TEST", 
                    }, 
                    "type": "PosedWidget", 
                    "uid": "p0pkje1hjcc9jukq"
                }, 
                "k1gzzc5uy1ynqtnj": {
                    "name": "animRot_positionH_v001", 
                    "data": {
                        "description": "rotational posing test for positionH", 
                        "created": "13/06/18 14:19", 
                        "project": "TEST", 
                    }, 
                    "type": "AnimWidget", 
                    "uid": "k1gzzc5uy1ynqtnj"
                }
            }
        }, 
        "panningTest": {
            "elements": {
                "7lyuri8g8u5ctwsa": {
                    "name": "posePan_positionZ_v001", 
                    "data": {
                        "description": "panning test for posZ", 
                        "created": "04/10/18 12:43", 
                        "project": "TEST", 
                    }, 
                    "type": "PosedWidget", 
                    "uid": "7lyuri8g8u5ctwsa"
                }
            }
        }, 
        "zoomingTest": {
            "elements": {
                "prtn0i6ehudhz475": {
                    "name": "posZoom_positionH_v010", 
                    "data": {
                        "description": "zoom test", 
                        "created": "11/10/18 12:42", 
                        "project": "TEST", 
                    }, 
                    "type": "PosedWidget", 
                    "uid": "prtn0i6ehudhz475"
                }
            }
        }
    }, 
    "page_order": [
        "rotatingTest", 
        "zoomingTest", 
        "panningTest"
    ]
}

这是我的代码:

for k1, v1 in test_dict.get('pages', {}).items():
    return (sorted(v1.get('elements').items(), key=lambda (k2,v2): v2['data']['created']))

在代码中,缺少诸如page_orderpages等的键... 或者,如果有/有什么命令可以使我保留词典的“全部”内容?

请提前感谢。

1 个答案:

答案 0 :(得分:1)

如果您使用的是Python 3.7,字典将保留插入顺序。否则,您需要使用OrderedDict。此外,您需要将日期字符串转换为日期以获取正确的排序顺序:

from datetime import datetime

def sortedPage(d):
    return {k: {'elements': dict(sorted(list(v['elements'].items()), key=lambda tuple: datetime.strptime(tuple[1]['data']['created'], '%d/%m/%y %H:%M')))} for k,v in d.items()}

output = {k: sortedPage(v) if k == 'pages' else v for k,v in input.items()}
相关问题