提问者:小点点

基于特定列表匹配具有字典项的列表以返回修改后的列表


我想匹配一个列表,其中的项目是一个字典与另一个字符串列表,如果有一个匹配,那么整个条目的列表停留或弹出。

例如,以下是列表:

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

共1个答案

匿名用户

您现在要做的是检查字符串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}}
]