February 01, 2018 Re: How to imporve D-translation of these Python list comprehensions ? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ola Fosheim Grøstad | On Thursday, 1 February 2018 at 20:18:37 UTC, Ola Fosheim Grøstad wrote:
> On Monday, 15 January 2018 at 19:05:52 UTC, xenon325 wrote:
>> def aget(d, k1, k2):
>> return d.get(k1, {}).get(k2, '')
>>
>> aa = ['ver', 'rev']
>> kk = set(chain(srv1.keys(), srv2.keys()))
>> dd = [dict(_name=k, **{a + str(i): aget(d, k, a) for a in aa for i, d in enumerate([srv1, srv2])}) for k in sorted(kk)]
>
> But that was really verbose, why didn't he contract everything into one line?
>
> dd = [dict(_name=k, **{a + str(i): d.get(k,{}).get(a,'') for a in ('ver','rev') for i, d in enumerate((srv1, srv2))}) for k in sorted(set(chain(srv1.keys(), srv2.keys())))]
>
> :*)
Rewritten in without comprehensions it is something like:
dd = []
for k in sorted(set(chain(srv1.keys(), srv2.keys()))):
record = {'_name':k}
for a in 'ver','rev':
for i, d in enumerate((srv1, srv2)):
record[f'{a}{i}'] = d.get(k,{}).get(a,'')
dd.append(record)
|
Copyright © 1999-2021 by the D Language Foundation