python - 匹配具有基于特定列表的字典项的列表以返回修改后的列表
问题描述
我想将包含作为字典的项目的列表与另一个字符串列表进行匹配,如果存在匹配项,则列表的整个条目将保留或弹出。
例如,这是列表:
list= [{'label': 'Fund.SharedClass.FOR ALL SICRIPTIONS:', 'type':
'radios', 'value': 'FOR ALL SICRIPTIONS:', 'group':
'Fund.SharedClass', 'overlay': {'page': 2, 'left': 261, 'top': 200,
'height': 12, 'width': 11}}, {'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}}]
我想匹配 list[0]['label'] 其中一个字符串值与另一个列表说 list2:
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']
如果 list2 的一项与 list one 的元素匹配,['label']
则该条目保留在列表中并替换为 list2 的匹配值,否则整个条目从列表中弹出,仅保留具有匹配项的条目与['label']
list2。
我试图遍历以查找项目,但未能返回所需的结果。如果有人可以提供帮助。
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
解决方案
您现在正在做的是检查整个list2
字符串是否存在key
。如果我理解正确,您想要做的是检查是否有任何元素list2
在key
.
另外,list[0]['label']
只是一个字符串,不能解压成key, 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}}
]
推荐阅读
- visual-studio-code - VSCode:“Markdown 预览”SHIFT-COMMAND-P 不起作用
- javascript - 试图获取一个非常大的文件的哈希(SHA-512),在 javascript 中超过 2.5 G
- java - Java 8 多键分组
- javascript - 在许多输入中加载和预览图像
- python - 如何删除tkinter中按钮之间的空间?
- console-application - 带有 C# 的 SendGrid V3 api 无法从控制台应用程序发送邮件
- java - Gson - CustomObject 内的嵌套对象 - java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap 无法转换为 java.util.List
- python - 基于条件的新列值
- java - c ++中用于联合查找的自引用结构
- python - blpapi.exception.UnsupportedOperationException:快照没有订阅管理端点(0x00080013)