Python 当列表包含其他列表中的特定字符时,请删除列表值
您好,我有一个名为“d”的dict和一个“待删除”列表,其中列表中的值如下所示:Python 当列表包含其他列表中的特定字符时,请删除列表值,python,list,dictionary,Python,List,Dictionary,您好,我有一个名为“d”的dict和一个“待删除”列表,其中列表中的值如下所示: d: {'data': [' VL0002511CA 000000000682414100000000000110000 ', ' VL0002511ZZ 000000000682414100000000000110000 ', ' VL0002512 PRE1985000000000682414100000000000110000 ',
d:
{'data': [' VL0002511CA 000000000682414100000000000110000 ',
' VL0002511ZZ 000000000682414100000000000110000 ',
' VL0002512 PRE1985000000000682414100000000000110000 ',
' VL0002521CA 000000001888990100000000000310000 ',
' VL0002521ZZ 000000001888990100000000000310000 ',
' VL0002522 PRE1985000000001888990100000000000310000 ',
' VL0002531CA 000000001223831100000000000210000 ',
' VL0002531ZZ 000000001223831100000000000210000 ',
' VL0002532 PRE1985000000001223831100000000000210000 ',
' VL0007871CA 000000001463787100000000000210000 ',
' VL0007871ZZ 000000001463787100000000000210000 ']}
to_be_removed:
Out[14]:
['ZZ', 'PRE']
d = {'data': [' VL0002511CA 000000000682414100000000000110000 ',
' VL0002511ZZ 000000000682414100000000000110000 ',
' VL0002512 PRE1985000000000682414100000000000110000 ',
' VL0002521CA 000000001888990100000000000310000 ',
' VL0002521ZZ 000000001888990100000000000310000 ',
' VL0002522 PRE1985000000001888990100000000000310000 ',
' VL0002531CA 000000001223831100000000000210000 ',
' VL0002531ZZ 000000001223831100000000000210000 ',
' VL0002532 PRE1985000000001223831100000000000210000 ',
' VL0007871CA 000000001463787100000000000210000 ',
' VL0007871ZZ 000000001463787100000000000210000 ']}
to_be_removed = ['PRE', 'ZZ']
updated = {'data': [item for item in d['data'] if not any(subst in item for subst in to_be_removed)] }
print(updated)
我需要从列表d中删除那些包含字符串“ZZ”和“PRE”的列表值。因此,我的输出列表应仅为值:
final_list:
{'data': [' VL0002511CA 000000000682414100000000000110000 ',
' VL0002521CA 000000001888990100000000000310000 ',
' VL0002531CA 000000001223831100000000000210000 ',
' VL0007871CA 000000001463787100000000000210000 ']}
如何在python中做到这一点?您可以使用如下列表理解:
d:
{'data': [' VL0002511CA 000000000682414100000000000110000 ',
' VL0002511ZZ 000000000682414100000000000110000 ',
' VL0002512 PRE1985000000000682414100000000000110000 ',
' VL0002521CA 000000001888990100000000000310000 ',
' VL0002521ZZ 000000001888990100000000000310000 ',
' VL0002522 PRE1985000000001888990100000000000310000 ',
' VL0002531CA 000000001223831100000000000210000 ',
' VL0002531ZZ 000000001223831100000000000210000 ',
' VL0002532 PRE1985000000001223831100000000000210000 ',
' VL0007871CA 000000001463787100000000000210000 ',
' VL0007871ZZ 000000001463787100000000000210000 ']}
to_be_removed:
Out[14]:
['ZZ', 'PRE']
d = {'data': [' VL0002511CA 000000000682414100000000000110000 ',
' VL0002511ZZ 000000000682414100000000000110000 ',
' VL0002512 PRE1985000000000682414100000000000110000 ',
' VL0002521CA 000000001888990100000000000310000 ',
' VL0002521ZZ 000000001888990100000000000310000 ',
' VL0002522 PRE1985000000001888990100000000000310000 ',
' VL0002531CA 000000001223831100000000000210000 ',
' VL0002531ZZ 000000001223831100000000000210000 ',
' VL0002532 PRE1985000000001223831100000000000210000 ',
' VL0007871CA 000000001463787100000000000210000 ',
' VL0007871ZZ 000000001463787100000000000210000 ']}
to_be_removed = ['PRE', 'ZZ']
updated = {'data': [item for item in d['data'] if not any(subst in item for subst in to_be_removed)] }
print(updated)
输出
{'data': [' VL0002511CA 000000000682414100000000000110000 ',
' VL0002521CA 000000001888990100000000000310000 ',
' VL0002531CA 000000001223831100000000000210000 ',
' VL0007871CA 000000001463787100000000000210000 ']}
要允许使用多个键的词典,请使用dict理解:
updated = {k: [item for item in v if not any(subst in item for subst in to_be_removed)] for k, v in d.items()}
您可以使用函数和列表生成/理解
d={'data': [' VL0002511CA 000000000682414100000000000110000 ',
' VL0002511ZZ 000000000682414100000000000110000 ',
' VL0002512 PRE1985000000000682414100000000000110000 ',
' VL0002521CA 000000001888990100000000000310000 ',
' VL0002521ZZ 000000001888990100000000000310000 ',
' VL0002522 PRE1985000000001888990100000000000310000 ',
' VL0002531CA 000000001223831100000000000210000 ',
' VL0002531ZZ 000000001223831100000000000210000 ',
' VL0002532 PRE1985000000001223831100000000000210000 ',
' VL0007871CA 000000001463787100000000000210000 ',
' VL0007871ZZ 000000001463787100000000000210000 ']}
to_be_removed=['ZZ', 'PRE']
lst = []
for j in d['data']:
if all(not i in j for i in to_be_removed):
lst.append(j)
final_data = {'data': lst}
print final_data
或仅一行-
print {'data': [j for j in d['data'] if all(not i in j for i in to_be_removed)]}
输出-
{'data': [' VL0002511CA 000000000682414100000000000110000 ', ' VL0002521CA 000000001888990100000000000310000 ', ' VL0002531CA 000000001223831100000000000210000 ', ' VL0007871CA 000000001463787100000000000210000 ']}
您可以使用
re.sub
,列表理解
和听写理解
:
In [182]: {'data' : [l2 for l2 in [re.sub('.*[(ZZ)|(PRE)]+.*', '', l1) for l1 in d['data']] if l2]}
Out[182]:
{'data': [' VL0002511CA 000000000682414100000000000110000 ',
' VL0002521CA 000000001888990100000000000310000 ',
' VL0002531CA 000000001223831100000000000210000 ',
' VL0007871CA 000000001463787100000000000210000 ']}
您可以使用正则表达式。>您不需要在
任何
参数中使用[]
。此外,您可以将其设置为dict理解,这样它也可以用于包含多个元素的词典。除此之外,这正是我想发布的内容。是的,我还在玩弄听写理解,但觉得它开始看起来太乱了!我想我现在再看一眼