Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #75492

Re: dict to boolean expression, how to?

Path csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!newsfeed.xs4all.nl!newsfeed2a.news.xs4all.nl!xs4all!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail
Return-Path <python-python-list@m.gmane.org>
X-Original-To python-list@python.org
Delivered-To python-list@mail.python.org
X-Spam-Status OK 0.000
X-Spam-Evidence '*H*': 1.00; '*S*': 0.00; 'from:addr:yahoo.co.uk': 0.04; 'column': 0.07; 'only,': 0.07; 'welcome.': 0.07; 'string': 0.09; "'a'": 0.09; 'lawrence': 0.09; 'pointers': 0.09; 'received:80.91': 0.09; 'received:80.91.229': 0.09; 'received:gmane.org': 0.09; 'received:list': 0.09; 'seemed': 0.09; 'spelling': 0.09; 'language.': 0.14; "'a',": 0.16; "'b',": 0.16; '0))': 0.16; 'bool': 0.16; 'boolean': 0.16; 'bullet': 0.16; 'dict': 0.16; 'lowercase': 0.16; 'received:80.91.229.3': 0.16; 'received:plane.gmane.org': 0.16; 'scientists': 0.16; 'subject:expression': 0.16; 'uppercase': 0.16; "{'a':": 0.16; 'language': 0.16; 'wrote:': 0.18; 'bit': 0.19; 'alex': 0.19; 'appears': 0.22; 'aug': 0.22; 'header:User-Agent:1': 0.23; 'sorry,': 0.24; 'earlier': 0.24; 'question': 0.24; "i've": 0.25; 'this:': 0.26; 'header:X-Complaints-To:1': 0.27; 'van': 0.27; 'header:In-Reply-To:1': 0.27; 'tried': 0.27; 'code': 0.31; 'keys': 0.31; 'names.': 0.31; 'steven': 0.31; 'there.': 0.32; 'fri,': 0.33; 'actual': 0.34; 'problem': 0.35; "can't": 0.35; 'tool': 0.35; 'but': 0.35; 'there': 0.35; 'reality': 0.36; 'whilst': 0.36; 'subject:?': 0.36; 'too': 0.37; 'being': 0.38; 'sometimes': 0.38; 'to:addr:python-list': 0.38; 'fact': 0.38; 'itself': 0.39; 'to:addr:python.org': 0.39; 'enough': 0.39; 'received:org': 0.40; 'how': 0.40; 'expression': 0.60; "you're": 0.61; 'first': 0.61; 'our': 0.64; 'more': 0.64; 'holding': 0.65; 'charset:windows-1252': 0.65; 'here': 0.66; 'approaches': 0.68; 'therefore': 0.72; 'theoretical': 0.74; 'forth': 0.81; 'literally.': 0.84
X-Injected-Via-Gmane http://gmane.org/
To python-list@python.org
From Mark Lawrence <breamoreboy@yahoo.co.uk>
Subject Re: dict to boolean expression, how to?
Date Fri, 01 Aug 2014 17:12:59 +0100
References <53db8bd8$0$2976$e4fe514c@news2.news.xs4all.nl> <53dba39e$0$2976$e4fe514c@news2.news.xs4all.nl>
Mime-Version 1.0
Content-Type text/plain; charset=windows-1252; format=flowed
Content-Transfer-Encoding 7bit
X-Gmane-NNTP-Posting-Host host-78-147-28-172.as13285.net
User-Agent Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.0
In-Reply-To <53dba39e$0$2976$e4fe514c@news2.news.xs4all.nl>
X-BeenThere python-list@python.org
X-Mailman-Version 2.1.15
Precedence list
List-Id General discussion list for the Python programming language <python-list.python.org>
List-Unsubscribe <https://mail.python.org/mailman/options/python-list>, <mailto:python-list-request@python.org?subject=unsubscribe>
List-Archive <http://mail.python.org/pipermail/python-list/>
List-Post <mailto:python-list@python.org>
List-Help <mailto:python-list-request@python.org?subject=help>
List-Subscribe <https://mail.python.org/mailman/listinfo/python-list>, <mailto:python-list-request@python.org?subject=subscribe>
Newsgroups comp.lang.python
Message-ID <mailman.12520.1406909597.18130.python-list@python.org> (permalink)
Lines 72
NNTP-Posting-Host 2001:888:2000:d::a6
X-Trace 1406909597 news.xs4all.nl 2916 [2001:888:2000:d::a6]:39130
X-Complaints-To abuse@xs4all.nl
Xref csiph.com comp.lang.python:75492

Show key headers only | View raw


On 01/08/2014 15:26, Alex van der Spek wrote:
> On Fri, 01 Aug 2014 12:45:12 +0000, Alex van der Spek wrote:
>
>> With a dict like so:
>>
>> cond = {'a': 1, 'b': 1, 'c': 1,
>>          'A': 0, 'B', 0, 'C':0}
>>
>> how would you make a boolean expression like this:
>>
>> bool = (('a' == 1) & ('A' == 0) |
>>          ('b' == 1) & ('B' == 0) |
>>          ('c' == 1) & ('C' == 0))
>>
>> The fact that lowercase and uppercase keys are stringed together with &
>> is intentional albeit the actual condition is a bit more tricky.
>>
>> I've tried several approaches using eval() on a string built from the
>> dict but landed with just spelling it out literally.
>>
>>
>> Any pointers welcome.
>> Alex
>
> I am sorry, the problem is ill posed.
>
> 'a', 'A' and so forth are my failed attempt to shorthand.
>
> In reality the dict's keys are column names in a pandas dataframe df.
>
> The boolean expression would therefore look like:
>
> bool = ((df['a'] == 1) & (df['A'] == 0) |
>           (df['b'] == 1) & (df['B'] == 0) |
>           (df['c'] == 1) & (df['C'] == 0))

See this 
http://stackoverflow.com/questions/19482970/python-get-list-from-pandas-dataframe-column-headers 
to get the column names.  Combine this with Steven D'Aprano's earlier 
answer using any() and I suspect you're there.

>
> I do know eval() lends itself to code injection but can't say I am
> fully aware of its dangers. It seemed like a handy tool to me.

It strikes me as being like looking down the gun barrel to see if 
there's a bullet loaded whilst holding the trigger.  Best avoided but 
there's always the "consenting adults" approach here :)

>
> This newsgroup scares me, it appears to be for professional computer
> scientists only, the theoretical part is sometimes too much for this
> practical physicist with an old background in FORTRAN.

If you're smart enough to state that your first question was ill posed, 
you're smart enough to ask questions when you don't understand.

>
> Is there a better place to ask questions of this nature?

No :)

>
> Alex van der Spek
>

-- 
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.

Mark Lawrence

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

dict to boolean expression, how to? Alex van der Spek <zdoor@xs4all.nl> - 2014-08-01 12:45 +0000
  Re: dict to boolean expression, how to? Chris Angelico <rosuav@gmail.com> - 2014-08-01 23:04 +1000
  Re: dict to boolean expression, how to? Roy Smith <roy@panix.com> - 2014-08-01 09:24 -0400
  Re: dict to boolean expression, how to? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-08-01 13:28 +0000
    Re: dict to boolean expression, how to? Roy Smith <roy@panix.com> - 2014-08-01 09:32 -0400
      Re: dict to boolean expression, how to? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-08-01 15:02 +0000
        Re: dict to boolean expression, how to? Terry Reedy <tjreedy@udel.edu> - 2014-08-01 18:16 -0400
    Re: dict to boolean expression, how to? Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-08-01 16:50 +0100
      Re: dict to boolean expression, how to? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-08-01 16:35 +0000
  Re: dict to boolean expression, how to? Alex van der Spek <zdoor@xs4all.nl> - 2014-08-01 14:26 +0000
    Re: dict to boolean expression, how to? marco.nawijn@colosso.nl - 2014-08-01 08:07 -0700
    Re: dict to boolean expression, how to? Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-08-01 15:24 +0000
      Re: dict to boolean expression, how to? Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-08-01 17:03 +0100
    Re: dict to boolean expression, how to? Peter Otten <__peter__@web.de> - 2014-08-01 17:44 +0200
      eval [was Re: dict to boolean expression, how to?] Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-08-02 02:59 +0000
        Re: eval [was Re: dict to boolean expression, how to?] Peter Otten <__peter__@web.de> - 2014-08-02 09:43 +0200
        Re: eval [was Re: dict to boolean expression, how to?] Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-08-02 08:59 +0100
        Re: eval [was Re: dict to boolean expression, how to?] Duncan Booth <duncan.booth@invalid.invalid> - 2014-08-05 11:57 +0000
          Re: eval [was Re: dict to boolean expression, how to?] Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2014-08-06 02:25 +1000
    Re: dict to boolean expression, how to? Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-08-01 17:12 +0100
    Re: dict to boolean expression, how to? Peter Pearson <ppearson@nowhere.invalid> - 2014-08-01 17:00 +0000
  Re: dict to boolean expression, how to? Ned Batchelder <ned@nedbatchelder.com> - 2014-08-01 10:29 -0400

csiph-web