Проверьте, содержит ли значение словаря элемент списка - PullRequest
1 голос
/ 23 января 2020

У меня есть словарь, в котором есть ключ (два префикса di git) и значение (список строк). Это выглядит примерно так:

prefixes = {
    "AC" : ["england-wales"],
    "OC" : ["england-wales", "wales"],
    "SC" : ["scotland"],
    "NC" : ["northern-ireland"]
}

Я пытаюсь создать список префиксов, в которых значение содержит область, указанную в списке.

Пропускаемая область может быть одна или другие регионы, например:

regions = ['england-wales', 'wales']

Итак, с помощью приведенных выше данных я хотел бы создать новый список с префиксами, и он будет содержать все префиксы, где либо 'wales', либо «Англия-Уэльс» включена в значение:

prefix_list = ['AC', 'OC']

Принимая во внимание, что если регионы просто равны «Уэльсу», то:

prefix_list = ['OC']

Я поиграл с несколькими вещами и Получилось это грязное решение:

combo_list = []
prefix_list = []

for r in regions:
    combo_list.append([k for k, v in prefixes.items() if r in v])

for sublist in combo_list:
    for i in sublist:
        prefix_list.append(i)

prefix_list = sorted(set(prefix_list)) #This will remove duplicates for me

Я думаю, что должен быть лучший, «чище» способ сделать это, но я не могу понять это. Любая помощь приветствуется.

1 Ответ

6 голосов
/ 23 января 2020

Вы можете использовать any() для этого - как понимание списка:

prefix_list = [k for k, v in prefixes.items() if any(x in v for x in regions)]

Дает нам

>>> prefix_list
['AC', 'OC']
...