Best way to deal with different data types in a list comprehension

Larry Martell larry.martell at gmail.com
Wed Sep 24 00:20:06 CEST 2014


On Tue, Sep 23, 2014 at 6:05 PM, Rock Neurotiko
<miguelglafuente at gmail.com> wrote:
> 2014-09-24 0:01 GMT+02:00 Larry Martell <larry.martell at gmail.com>:
>>
>> I have some code that I inherited:
>>
>> ' '.join([self.get_abbrev()] +
>>            [str(f['value')
>>             for f in self.filters
>>             if f.has_key('value')]).strip()
>>
>>
>> This broke today when it encountered some non-ascii data.
>>
>> I changed the str(f['value']) line to f['value'].encode('utf-8'),
>> which works fine, except when f['value'] is not a string (it could be
>> anything).
>>
>> Without rewriting this without the list comprehension, how can I write
>> this to deal with both strings and non-strings?

> Maybe there are a different way, but you can do this:
>
> ' '.join([self.get_abbrev()] +
>            [str(f['value').encode('utf-8') if type(f['value']) is str else
> str(f['value']
>             for f in self.filters
>             if f.has_key('value')]).strip()

Thanks for the reply, but please don't top post.

This worked for me:

'.join([self.get_abbrev()] +
         [f['value'].encode('utf-8') if type(f['value']) is unicode
else str(f['value'])
          for f in self.filters
          if f.has_key('value')]).strip()



More information about the Python-list mailing list