Как сопоставить из списка, какие ключи упоминаются в порядке словаря

#python

#python

Вопрос:

Список и словарь приведены ниже

 main_list = ["projecttype", "emptype", "Designation"]
sample = {
    "query": {
        "emptype": ["Manager"],
        "Designation": ["Developer"],
        "from": ["0"],
        "q": [""], 
        "projecttype": ["temp"],
        "size": ["4"]
    }
}
 

Как найти, main_list какие ключи упоминаются в order словаре. Я использую 3.7

Ожидаемый результат

{"emptype":["Manager"], "Designation":["Developer"], "projecttype":["temp"] }

Комментарии:

1. {key: items for key, items in sample["query"].items() if key in main_list}

2. @falsetru вероятно, лучше наоборот, {k:sample['query'][k] for k in main_list if k in sample['query']} если main_list он большой, хотя, если он маленький, работает в любом случае

3. @juanpa.arrivillaga, OP требует сохранения порядка, в котором они представлены в dict

4. Если он большой, мы можем создать набор, чтобы сократить время тестирования членства: main_set = set(main_list); {key: items for key, items in sample["query"].items() if key in main_set}

5. @falsetru ах, пропустил это требование, хотя я скептически отношусь к нему как к требованию.

Ответ №1:

Поехали;

  main_list = ["projecttype", "emptype", "Designation"]
sample = {
    "query": {
        "emptype": ["Manager"],
        "Designation": ["Developer"],
        "from": ["0"],
        "q": [""], 
        "projecttype": ["temp"],
        "size": ["4"]
    }
}
dc = {}

for key, value in sample["query"].items():
    for i in range(len(main_list)):
        if key == main_list[i]:
            dc[main_list[i]] = value
print(dc)
 

Комментарии:

1. Но помните, что объекты dict не являются упорядоченными, поэтому порядок может отличаться от порядка списка.

2. Пожалуйста, также оставьте свой голос, если это помогло. Спасибо!