Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当列表包含其他列表中的特定字符时,请删除列表值_Python_List_Dictionary - Fatal编程技术网

Python 当列表包含其他列表中的特定字符时,请删除列表值

Python 当列表包含其他列表中的特定字符时,请删除列表值,python,list,dictionary,Python,List,Dictionary,您好,我有一个名为“d”的dict和一个“待删除”列表,其中列表中的值如下所示: d: {'data': [' VL0002511CA 000000000682414100000000000110000 ', ' VL0002511ZZ 000000000682414100000000000110000 ', ' VL0002512 PRE1985000000000682414100000000000110000 ',

您好,我有一个名为“d”的dict和一个“待删除”列表,其中列表中的值如下所示:

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理解,这样它也可以用于包含多个元素的词典。除此之外,这正是我想发布的内容。是的,我还在玩弄听写理解,但觉得它开始看起来太乱了!我想我现在再看一眼