Создайте вложенное меню, используя python - PullRequest
1 голос
/ 13 января 2020

Я работаю над GUI для ЖК-экрана, подключенного к Raspberry PI.

Я бы хотел создать меню из таких слов:

my_menu = {
    "menu1": {
        "submenu1": {
            "subsubmenu1": None
        },
        "submenu2": None,
        "submenu3": None,
    },
    "menu2": {
        "submenu1": None,
        "submenu2": None,
    }
}

for item in my_menu:
    print(item)
}

Я бы хотел сохранить тот же порядок, который определен в словаре.

Проблема в том, что python словари не упорядочены, а пункты меню на ЖК-экране отображаются не в правильном порядке.

Таким образом, я мог бы легко заставить его работать в JS (используя json) или PHP (используя массивы), но я просто начал использовать python, и я понятия не имею, как лучше всего это сделать. на этом языке.

Я прочитал несколько статей об OrderedDict, но я не уверен, что это хорошая идея.

Так что мой вопрос заключается в том, как сделать это чистым и эффективным способом. ".

Мой код работает под python 2.7, но я могу обновить версию при необходимости.

Спасибо за ваше время!

1 Ответ

1 голос
/ 13 января 2020

войдите в упорядоченный dict, затем сортируйте подменю

from collections import OrderedDict

unsorted = {
    "menu2": {
        "submenu2": {
            "subsubmenu1": None
        },
        "submenu3": None,
        "submenu1": None,
    },
    "menu1": {
        "submenu3": None,
        "submenu1": None,
    }
}

ord_menu = OrderedDict(sorted(unsorted.items()))
for k,v in ord_menu.items():
    print(sorted(v))
    ord_menu[k] = sorted(v)
print(ord_menu)  

, если вы просто пытаетесь сохранить порядок, просто обновите -from с python 3.6 и далее сохраняется порядок диктов, с здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...