如何使用通配符键值从dicts列表中检索dicts

时间:2015-04-14 22:21:00

标签: python

我有一个很大的词典列表,每个词典都有一个键:值正常。我想在下面的示例中获取与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}...]

1 个答案:

答案 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)