Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   Functional way to compare things inside a list (http://www.velocityreviews.com/forums/t952486-functional-way-to-compare-things-inside-a-list.html)

thorsopia@lavabit.com 09-20-2012 10:58 PM

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?







Ivan@work 09-21-2012 08:24 AM

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]]


Alexander Blinne 09-21-2012 08:31 AM

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...

Ulrich Eckhardt 09-21-2012 08:52 AM

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


88888 Dihedral 09-21-2012 07:54 PM

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.



Ian Kelly 09-21-2012 08:49 PM

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.

88888 Dihedral 09-21-2012 09:45 PM

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?

88888 Dihedral 09-21-2012 09:45 PM

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?

Steven D'Aprano 09-22-2012 01:25 AM

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

Ian Kelly 09-22-2012 06:22 AM

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 12:49 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.