"comprehend" into a single value

Ned Batchelder ned at nedbatchelder.com
Sun Oct 8 07:40:23 EDT 2017


On 10/8/17 1:00 AM, Andrew Z wrote:
> and how about adding "IF" into the mix ?
>
> as in :
>
> a=0
>
> dict= {10: ['a',1,'c'], 20: ['d',2,'f']}
>
> for i in dict:
>
>   p+= 10 if dict[i][1] in [1,2,3,4,5] else 0
>
>
> can i "squish" "for" and "if" together ? or will it be too perl-ish ?

     sum(10 for v in dict.values() if v[1] in [1,2,3,4,5])

or:

     sum((10 if v[1] in [1,2,3,4,5] else 0) for v in dict.values())

(in case you actually need something other than 0.)

Also, note that if your list of five values is actually much longer than 
five, then you want a set:

     sum((10 if v[1] in {1,2,3,4,5} else 0) for v in dict.values())

--Ned.

>
>
>
>
> On Sun, Oct 8, 2017 at 12:37 AM, Andrew Z <formisc at gmail.com> wrote:
>
>> Nathan, Bob - on the money. Thank you !
>>
>> On Sat, Oct 7, 2017 at 11:30 PM, bob gailer <bgailer at gmail.com> wrote:
>>
>>> On 10/7/2017 11:17 PM, Nathan Hilterbrand wrote:
>>>
>>>> dict= {10: ['a',1,'c'], 20: ['d',2,'f']}
>>>> p = sum([dict[i][1] for i in dict])
>>>>
>>>> Something like that?
>>>>
>>> Ah, but that's 2 lines.
>>>
>>> sum(val[1] for val in  {10: ['a',1,'c'], 20: ['d',2,'f']}.values())
>>>
>>> On Sat, Oct 7, 2017 at 11:07 PM, Andrew Z <formisc at gmail.com> wrote:
>>>> Hello,
>>>>>    i wonder how  can i accomplish the following as a one liner:
>>>>>
>>>>> dict= {10: ['a',1,'c'], 20: ['d',2,'f']}
>>>>> p = 0
>>>>> for i in dict:
>>>>>           p += dict[i][1]
>>>>>
>>>>>
>>>>> Thank you
>>>>> --
>>>>> https://mail.python.org/mailman/listinfo/python-list
>>>>>
>>>>>
>>> --
>>> Image and video hosting by TinyPic
>>>
>>




More information about the Python-list mailing list