![]() |
Functional way to compare things inside a list
Hi,
list = [{'1': []}, {'2': []}, {'3': ['4', '5']}] I want to check for a value (e.g. '4'), and get the key of the dictionary that contains that value. (Yep, this is bizarre.) some_magic(list, '4') => '3' What's the functional way to do it? Is it possible to do it with a one-liner? |
Re: Functional way to compare things inside a list
On 21.09.2012 00:58, thorsopia@lavabit.com wrote:
> Hi, > > list = [{'1': []}, {'2': []}, {'3': ['4', '5']}] > > I want to check for a value (e.g. '4'), and get the key of the dictionary > that contains that value. > (Yep, this is bizarre.) > > some_magic(list, '4') > => '3' > > What's the functional way to do it? > Is it possible to do it with a one-liner? > > Yes: [key for d in list for key in d if '4' in d[key]] |
Re: Functional way to compare things inside a list
On 21.09.2012 00:58, thorsopia@lavabit.com wrote:
> Hi, > > list = [{'1': []}, {'2': []}, {'3': ['4', '5']}] > > I want to check for a value (e.g. '4'), and get the key of the dictionary > that contains that value. > (Yep, this is bizarre.) > > some_magic(list, '4') > => '3' > > What's the functional way to do it? > Is it possible to do it with a one-liner? simple, but possibly slow solution: import itertools def some_magic(list, search): return (key for key, val in itertools.chain(*(d.iteritems() for d in list)) if search in val).next() one-liner, yeah... |
Re: Functional way to compare things inside a list
Am 21.09.2012 00:58, schrieb thorsopia@lavabit.com:
> list = [{'1': []}, {'2': []}, {'3': ['4', '5']}] > > I want to check for a value (e.g. '4'), and get the key of the dictionary > that contains that value. Note: 1. list is a built-in type, who's name is rebound above 2. The list above contains dictionaries that all only contain a single key? 3. You have strings containing decimal representations of numbers? > (Yep, this is bizarre.) The data are really stored in a strange way and you might be able to make things clearer by reorganizing them a bit. > some_magic(list, '4') > => '3' > > What's the functional way to do it? Functional as in functional programming and an emphasis on lazy evaluation? In that case I'd write a generator that emits the keys where the values contain the requested string. > Is it possible to do it with a one-liner? Yep, filter(), lambda and the 'in' operator. Question remains if this is readable. Note that you can use a local function, too, if you just want to reduce the scope/visibility. Good luck! Uli |
Re: Functional way to compare things inside a list
Ulrich Eckhardt於 2012年9月21日星期五UTC+8下午5時15分03秒 寫道:
> Am 21.09.2012 00:58, schrieb thorsopia@lavabit.com: > > > list = [{'1': []}, {'2': []}, {'3': ['4', '5']}] > > > > > > I want to check for a value (e.g. '4'), and get the key of the dictionary > > > that contains that value. > > > > Note: > > 1. list is a built-in type, who's name is rebound above > > 2. The list above contains dictionaries that all only contain a single key? > > 3. You have strings containing decimal representations of numbers? > > > > > (Yep, this is bizarre.) > > > > The data are really stored in a strange way and you might be able to > > make things clearer by reorganizing them a bit. > > > > > > > some_magic(list, '4') > > > => '3' > > > > > > What's the functional way to do it? > > > > Functional as in functional programming and an emphasis on lazy > > evaluation? In that case I'd write a generator that emits the keys where > > the values contain the requested string. > > > > > > > Is it possible to do it with a one-liner? > > > > Yep, filter(), lambda and the 'in' operator. Question remains if this is > > readable. Note that you can use a local function, too, if you just want > > to reduce the scope/visibility. > > > > > > Good luck! > > > > > > Uli I don't think functional aspects are only marked as lazy programming. It just means when one is experimenting something the efficient execution in speed is not on focus yet. |
Re: Functional way to compare things inside a list
On Fri, Sep 21, 2012 at 1:54 PM, 88888 Dihedral
<dihedral88888@googlemail.com> wrote: > I don't think functional aspects are only marked as lazy > programming. He wrote "lazy evaluation", not "lazy programming". Two entirely different things. > It just means when one is experimenting something > the efficient execution in speed is not on focus > yet. No, what you're describing is a "prototype". It has nothing to do with functional programming at all. |
Re: Functional way to compare things inside a list
A
Ian於 2012年9月22日星期*UTC+8上午4時50分49秒 寫道: > On Fri, Sep 21, 2012 at 1:54 PM, 88888 Dihedral > > <dihedral88888@googlemail.com> wrote: > > > I don't think functional aspects are only marked as lazy > > > programming. > > > > He wrote "lazy evaluation", not "lazy programming". Two entirely > > different things. > > > > > It just means when one is experimenting something > > > the efficient execution in speed is not on focus > > > yet. > > > > No, what you're describing is a "prototype". It has nothing to do > > with functional programming at all. A function with varaible arguments can be stored as a variable to functions called decorators in python to return enhanced functions. A function mapps a decorator to another decorator can be called a decorator map or a decorator maker in python. The closure level is guaranteed for decorators to be mapped by multi-levels of decorator mappers trivially in python. What do you want else for functional prgramming in python? |
Re: Functional way to compare things inside a list
A
Ian於 2012年9月22日星期*UTC+8上午4時50分49秒 寫道: > On Fri, Sep 21, 2012 at 1:54 PM, 88888 Dihedral > > <dihedral88888@googlemail.com> wrote: > > > I don't think functional aspects are only marked as lazy > > > programming. > > > > He wrote "lazy evaluation", not "lazy programming". Two entirely > > different things. > > > > > It just means when one is experimenting something > > > the efficient execution in speed is not on focus > > > yet. > > > > No, what you're describing is a "prototype". It has nothing to do > > with functional programming at all. A function with varaible arguments can be stored as a variable to functions called decorators in python to return enhanced functions. A function mapps a decorator to another decorator can be called a decorator map or a decorator maker in python. The closure level is guaranteed for decorators to be mapped by multi-levels of decorator mappers trivially in python. What do you want else for functional prgramming in python? |
Re: Functional way to compare things inside a list
On Fri, 21 Sep 2012 14:49:55 -0600, Ian Kelly wrote:
> On Fri, Sep 21, 2012 at 1:54 PM, 88888 Dihedral > <dihedral88888@googlemail.com> wrote: >> I don't think functional aspects are only marked as lazy programming. > > He wrote "lazy evaluation", not "lazy programming". Two entirely > different things. For the record, the consensus here is that 88888 Dihedral is probably a bot. It appears to be a pretty good bot, I haven't spotted it making any egregious or obvious grammatical mistakes, but the semantics of its posts don't seem quite human. 88888 Dihedral, if you're not a bot, you can go a long way towards proving that by telling us what colour a purple elephant is. -- Steven |
Re: Functional way to compare things inside a list
On Fri, Sep 21, 2012 at 7:25 PM, Steven D'Aprano
<steve+comp.lang.python@pearwood.info> wrote: > On Fri, 21 Sep 2012 14:49:55 -0600, Ian Kelly wrote: > >> On Fri, Sep 21, 2012 at 1:54 PM, 88888 Dihedral >> <dihedral88888@googlemail.com> wrote: >>> I don't think functional aspects are only marked as lazy programming. >> >> He wrote "lazy evaluation", not "lazy programming". Two entirely >> different things. > > > For the record, the consensus here is that 88888 Dihedral is probably a > bot. It appears to be a pretty good bot, I haven't spotted it making any > egregious or obvious grammatical mistakes, but the semantics of its posts > don't seem quite human. I'm aware of that, although sometimes the posts seem coherent enough that I think maybe it's not. Especially the ones where it posts almost-working code snippets, complete with obvious typos. Then it posts a complete non sequitur like the reply to my reply in this thread, and the illusion is shattered. |
| All times are GMT. The time now is 09:20 PM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.