Functional way to compare things inside a list

Discussion in 'Python' started by thorsopia@lavabit.com, Sep 20, 2012.

  1. Guest

    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?
    , Sep 20, 2012
    #1
    1. Advertising

  2. Ivan@work Guest

    On 21.09.2012 00:58, 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]]
    Ivan@work, Sep 21, 2012
    #2
    1. Advertising

  3. On 21.09.2012 00:58, 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...
    Alexander Blinne, Sep 21, 2012
    #3
  4. Am 21.09.2012 00:58, schrieb :
    > 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
    Ulrich Eckhardt, Sep 21, 2012
    #4
  5. Ulrich Eckhardtæ–¼ 2012å¹´9月21日星期五UTC+8下åˆ5時15分03秒寫é“:
    > Am 21.09.2012 00:58, schrieb :
    >
    > > 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.
    88888 Dihedral, Sep 21, 2012
    #5
  6. Ian Kelly Guest

    On Fri, Sep 21, 2012 at 1:54 PM, 88888 Dihedral
    <> 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.
    Ian Kelly, Sep 21, 2012
    #6
  7. A

    Ianæ–¼ 2012å¹´9月22日星期六UTC+8上åˆ4時50分49秒寫é“:
    > On Fri, Sep 21, 2012 at 1:54 PM, 88888 Dihedral
    >
    > <> 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, Sep 21, 2012
    #7
  8. A

    Ianæ–¼ 2012å¹´9月22日星期六UTC+8上åˆ4時50分49秒寫é“:
    > On Fri, Sep 21, 2012 at 1:54 PM, 88888 Dihedral
    >
    > <> 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, Sep 21, 2012
    #8
  9. On Fri, 21 Sep 2012 14:49:55 -0600, Ian Kelly wrote:

    > On Fri, Sep 21, 2012 at 1:54 PM, 88888 Dihedral
    > <> 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
    Steven D'Aprano, Sep 22, 2012
    #9
  10. Ian Kelly Guest

    On Fri, Sep 21, 2012 at 7:25 PM, Steven D'Aprano
    <> wrote:
    > On Fri, 21 Sep 2012 14:49:55 -0600, Ian Kelly wrote:
    >
    >> On Fri, Sep 21, 2012 at 1:54 PM, 88888 Dihedral
    >> <> 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.
    Ian Kelly, Sep 22, 2012
    #10
  11. Ianæ–¼ 2012å¹´9月22日星期六UTC+8下åˆ2時23分43秒寫é“:
    > On Fri, Sep 21, 2012 at 7:25 PM, Steven D'Aprano
    >
    > <> wrote:
    >
    > > On Fri, 21 Sep 2012 14:49:55 -0600, Ian Kelly wrote:

    >
    > >

    >
    > >> On Fri, Sep 21, 2012 at 1:54 PM, 88888 Dihedral

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


    Do you want to use the lisp way for implementing functional programming?
    88888 Dihedral, Sep 22, 2012
    #11
  12. Ianæ–¼ 2012å¹´9月22日星期六UTC+8下åˆ2時23分43秒寫é“:
    > On Fri, Sep 21, 2012 at 7:25 PM, Steven D'Aprano
    >
    > <> wrote:
    >
    > > On Fri, 21 Sep 2012 14:49:55 -0600, Ian Kelly wrote:

    >
    > >

    >
    > >> On Fri, Sep 21, 2012 at 1:54 PM, 88888 Dihedral

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


    Do you want to use the lisp way for implementing functional programming?
    88888 Dihedral, Sep 22, 2012
    #12
  13. [ Ian Kelly wrote on Sat 22.Sep'12 at 0:22:43 -0600 ]

    > On Fri, Sep 21, 2012 at 7:25 PM, Steven D'Aprano
    > <> wrote:
    > > On Fri, 21 Sep 2012 14:49:55 -0600, Ian Kelly wrote:
    > >
    > >> On Fri, Sep 21, 2012 at 1:54 PM, 88888 Dihedral
    > >> <> 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.


    I find this intriguing, I had no idea bots existed to post to mailing
    lists in this way. What's the point of them?
    Jamie Paul Griffin, Sep 22, 2012
    #13
  14. Andrew Berg Guest

    On 2012.09.22 02:08, Jamie Paul Griffin wrote:
    > I find this intriguing, I had no idea bots existed to post to mailing
    > lists in this way. What's the point of them?


    To amuse their owners is my guess.
    --
    CPython 3.3.0rc2 | Windows NT 6.1.7601.17835
    Andrew Berg, Sep 22, 2012
    #14
  15. On Saturday, 22 September 2012 12:50:08 UTC+5:30, Andrew Berg wrote:
    > On 2012.09.22 02:08, Jamie Paul Griffin wrote:
    >
    > > I find this intriguing, I had no idea bots existed to post to mailing

    >
    > > lists in this way. What's the point of them?

    >
    >
    >
    > To amuse their owners is my guess.
    >
    > --
    >
    > CPython 3.3.0rc2 | Windows NT 6.1.7601.17835


    The bot could be used for automatic replies for duplicate posts (common questions are quite often repeated)
    Ramchandra Apte, Sep 23, 2012
    #15
  16. On Saturday, 22 September 2012 12:50:08 UTC+5:30, Andrew Berg wrote:
    > On 2012.09.22 02:08, Jamie Paul Griffin wrote:
    >
    > > I find this intriguing, I had no idea bots existed to post to mailing

    >
    > > lists in this way. What's the point of them?

    >
    >
    >
    > To amuse their owners is my guess.
    >
    > --
    >
    > CPython 3.3.0rc2 | Windows NT 6.1.7601.17835


    The bot could be used for automatic replies for duplicate posts (common questions are quite often repeated)
    Ramchandra Apte, Sep 23, 2012
    #16
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. gf gf
    Replies:
    6
    Views:
    315
    Dave Benjamin
    Mar 5, 2005
  2. Chris Angelico
    Replies:
    0
    Views:
    197
    Chris Angelico
    Sep 21, 2012
  3. Chris Rebert
    Replies:
    0
    Views:
    166
    Chris Rebert
    Sep 21, 2012
  4. Chris Angelico
    Replies:
    0
    Views:
    172
    Chris Angelico
    Sep 21, 2012
  5. Chris Rebert
    Replies:
    0
    Views:
    201
    Chris Rebert
    Sep 21, 2012
Loading...

Share This Page