Exclude 'None' from list comprehension of dicts

Antoon Pardon antoon.pardon at vub.be
Tue Aug 16 15:31:56 EDT 2022



Op 16/08/2022 om 00:20 schreef dn:
> On 16/08/2022 00.56, Antoon Pardon wrote:
>> Op 5/08/2022 om 07:50 schreef Loris Bennett:
>>> Antoon Pardon<antoon.pardon at vub.be>   writes:
>>>
>>>> Op 4/08/2022 om 13:51 schreef Loris Bennett:
>>>>> 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?
>>>> Just wondering, why don't you return an empty dictionary in case of a
>>>> failure?
>>>> In that case your list will be all dictionaries and empty ones will
>>>> be processed
>>>> fast enough.
>>> When the list of dictionaries is processed, I would have to check each
>>> element to see if it is empty.  That strikes me as being less efficient
>>> than filtering out the empty dictionaries in one go, although obviously
>>> one would need to benchmark that.
>> I may be missing something but why would you have to check each element
>> to see if it is empty? What would go wrong if you just treated empty
>> dictionaries the same as non-empty directories?
> 'Truthiness':-

In what way is that relevant in this case?

-- 
Antoon Pardon


More information about the Python-list mailing list