检查字典值是否包含列表项

nim*_*wfc 1 python dictionary for-loop list-comprehension list

我有一个字典,它有一个键(一个两位数的前缀)和一个值(一个字符串列表)。它看起来像这样:

prefixes = {
    "AC" : ["england-wales"],
    "OC" : ["england-wales", "wales"],
    "SC" : ["scotland"],
    "NC" : ["northern-ireland"]
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个前缀列表,其中的值包含列表中提供的区域。

通过的区域可以是一个或多个区域,例如:

regions = ['england-wales', 'wales']
Run Code Online (Sandbox Code Playgroud)

因此,上述数据我想创建一个新的列表名为前缀,它将包含所有的前缀,其中无论是“威尔士”或“英格兰威尔士”包含在值:

prefix_list = ['AC', 'OC']
Run Code Online (Sandbox Code Playgroud)

而如果 region 刚好等于 'wales' 那么:

prefix_list = ['OC']
Run Code Online (Sandbox Code Playgroud)

我玩了一些东西,让这个凌乱的解决方案起作用:

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
Run Code Online (Sandbox Code Playgroud)

我认为必须有一种更好、更“清洁”的方式来做到这一点,但无法完全弄清楚。任何帮助表示赞赏。

CDJ*_*DJB 6

您可以any()为此使用- 作为列表理解:

prefix_list = [k for k, v in prefixes.items() if any(x in v for x in regions)]
Run Code Online (Sandbox Code Playgroud)

给我们

>>> prefix_list
['AC', 'OC']
Run Code Online (Sandbox Code Playgroud)