我有一个很大的词典列表,每个词典都有一个键:值正常。我想在下面的示例中获取与name键的特定通配符键值匹配的所有dicts。
例如,如果以下名称键的值采用A_B_C_D
格式(例如John_Michael_Joseph_Smith
),我将如何获取搜索格式为A*D
的名称值的所有词条(例如John*Smith
?)或格式A_B*
(例如John_Michael*
)等?
mylist=[{id:value,name:value,parent:value},
{id:value,name:value,parent:value},
{id:value,name:value,parent:value}...]
答案 0 :(得分:3)
您的模式似乎使用UNIX文件名模式; *
匹配任意数量的字符。您可以使用fnmatch.fnmatch()
function生成过滤器:
>>> from fnmatch import fnmatch
>>> fnmatch('John_Michael_Joseph_Smith', 'John*Smith')
True
>>> fnmatch('John_Michael_Joseph_Smith', 'John_Michael*')
True
您可以在列表推导中使用过滤器来生成匹配词典的新列表,根据模式测试每个dictionary['name']
值:
from fnmatch import fnmatch
def namesearch(pattern, dictionaries):
return [d for d in dictionaries if fnmatch(d['name'], pattern)]
此处namesearch
返回'name'
值与给定模式匹配的列表词典:
matched = namesearch('John*Smith', mylist)