我想匹配一个列表,其中的项目是一个字典与另一个字符串列表,如果有一个匹配,那么整个条目的列表停留或弹出。
例如,以下是列表:
list=[{'label': 'Fund.SharedClass.For ALL Sicritions:', “type”: “收音机”, “value”: “for ALL sicriptions:', “组”: “Fund.SharedClass”, “覆盖”: {“页”: 2, “左”: 261, “top”: 200, “高度”: 12, “width”: 11}}, {“label”: 'Fund.SharedClass.A类美元股‘, “type”: “收音机”, “value”: “A类美元股”, “组”: “Fund.SharedClass”, “覆盖”: {“页”: 2, “左”: 689, “top”: 276, “高度”: 23, “width”: 28}}, {“label”: 'Fund.SharedClass.A类美元股‘, “type”: “收音机”, “value”: “A类美元股”, “组”: “Fund.SharedClass”, “覆盖”: {“页”: 2, “左”: 688, “top”: 275, “高度”: 25, “width”: 30}}, {“label”:“Fund.SharedClass A Sterling Shares”,“type”:“radios”,“value”:“Class A Sterling Shares”,“group”:“Fund.SharedClass”,“overlay”:{“page”:2,“left”:689,“top”:313,“height”:23,“width”:28}},{“label”:“Fund.SharedClass”,“type”:“radios”,“value”:“Class A Sterling Shares”,“group”:“Fund.SharedClass
我想匹配列表[0]['label'],字符串值与另一个列表(如LIST2):
列表2=['B类英镑无表决权股份‘,'B类美元无表决权股份’,'Allar类无表决权股份‘,'A类美元无表决权股份’,'B类英镑股份‘,'B类美元股份’,'A类英镑股份‘,'A类美元股份']
如果与['label']的list one元素的list2中的一个项匹配,那么该条目将保留在列表中,并替换为list2的匹配值,否则整个条目将从列表中弹出,只保留与list2匹配的['label']条目。
我曾尝试遍历以查找这些项,但未能返回所需的结果。 如果有人能帮忙的话。
def model(list):
list2= ['Class B Sterling Non-Voting Shares', 'Class B Dollar Non-Voting Shares', 'Class Allar Non-Voting Shares', 'Class A Dollar Non-Voting Shares', 'Class B Sterling Shares', 'Class B Dollar Shares', 'Class A Sterling Shares', 'Class A Dollar Shares']
res = [val for key, val in list[0]['label'] if list2 in key]
return res
您现在要做的是检查字符串key
中是否存在整个list2
。 如果我理解正确,您想要做的是检查list2
的任何元素是否在key
中。
此外,list[0]['label']
只是一个字符串,您不能将其解压缩到键,val
中。
尝试如下所示:
def isElementOfListInString(a_list, a_string):
for element in a_list:
if element in a_string:
return True
return False
然后修改您的当前代码,说明:
res = [dictionary for dictionary in list if isElementOfListInString(list2, dictionary['label'])]
或者,字典中的'value'
看起来包含要与之匹配的标签部分,因此您可以这样做:
res = [dictionary for dictionary in list if dictionary['value'] in list2]
两者的输出都是:
[
{'label': 'Fund.SharedClass.Class A Dollar Shares', 'type': 'radios', 'value': 'Class A Dollar Shares', 'group': 'Fund.SharedClass', 'overlay': {'page': 2, 'left': 689, 'top': 276, 'height': 23, 'width': 28}},
{'label': 'Fund.SharedClass.Class A Dollar Shares', 'type': 'radios', 'value': 'Class A Dollar Shares', 'group': 'Fund.SharedClass', 'overlay': {'page': 2, 'left': 688, 'top': 275, 'height': 25, 'width': 30}},
{'label': 'Fund.SharedClass.Class A Sterling Shares', 'type': 'radios', 'value': 'Class A Sterling Shares', 'group': 'Fund.SharedClass', 'overlay': {'page': 2, 'left': 689, 'top': 313, 'height': 23, 'width': 28}},
{'label': 'Fund.SharedClass.Class A Sterling Shares', 'type': 'radios', 'value': 'Class A Sterling Shares', 'group': 'Fund.SharedClass', 'overlay': {'page': 2, 'left': 688, 'top': 312, 'height': 25, 'width': 30}},
{'label': 'Fund.SharedClass.Class B Dollar Shares', 'type': 'radios', 'value': 'Class B Dollar Shares', 'group': 'Fund.SharedClass', 'overlay': {'page': 2, 'left': 689, 'top': 353, 'height': 23, 'width': 28}},
{'label': 'Fund.SharedClass.Class B Dollar Shares', 'type': 'radios', 'value': 'Class B Dollar Shares', 'group': 'Fund.SharedClass', 'overlay': {'page': 2, 'left': 688, 'top': 352, 'height': 25, 'width': 30}}
]