Exclude 'None' from list comprehension of dicts

MRAB python at mrabarnett.plus.com
Thu Aug 4 14:50:16 EDT 2022


On 2022-08-04 12:51, Loris Bennett wrote:
> Hi,
> 
> I am constructing a list of dictionaries via the following list
> comprehension:
> 
>    data = [get_job_efficiency_dict(job_id) for job_id in job_ids]
> 
> However,
> 
>    get_job_efficiency_dict(job_id)
> 
> uses 'subprocess.Popen' to run an external program and this can fail.
> In this case, the dict should just be omitted from 'data'.
> 
> I can have 'get_job_efficiency_dict' return 'None' and then run
> 
>    filtered_data = list(filter(None, data))
> 
> but is there a more elegant way?
> 
I'm not sure how elegant it is, but:

data = [result for job_id in job_ids if (result := 
get_job_efficiency_dict(job_id)) is not None]


More information about the Python-list mailing list