do this with list comp?

Dave Brueck dave at pythonapocrypha.com
Sat Dec 13 09:28:28 EST 2003


Peter wrote:
> > > I want to replace all empty fields in a CSV line with 'NULL'.
> > >
> > > Here is a brute force way
> > >
> > >     def fixline(line):
> > >         ret = []
> > >         for s in line.split(','):
> > >             if not len(s): ret.append('NULL')
> > >             else: ret.append(s)
> > >         return ret
> > >
> > >     line = 'John,Bill,,,Fred'
> > >     print fixline(line)
> > >     # ['John', 'Bill', 'NULL', 'NULL', 'Fred']
> > >
> > > I am wondering if there is a way to do it with list comprehensions.  I
> > > know how I would do it with a ternary operator.....
> > 
> > Prepare to be flooded with answers. ;-)
> > 
> > >>> line = 'John,Bill,,,Fred'
> > >>> [x or 'NULL' for x in line.split(',')]
> > ['John', 'Bill', 'NULL', 'NULL', 'Fred']
[snip]
> And there was still a one-liner:
> >>> line = 'John,Bill,,,Fred'
> >>> map(lambda x:x or 'NULL',line.split(','))
> ['John', 'Bill', 'NULL', 'NULL', 'Fred']

Uh, the listcomp way was a one-liner too. Or do I misunderstand your comment?





More information about the Python-list mailing list