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


Groups > comp.lang.python > #35772

Re: dict comprehension question.

Path csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!news.mixmin.net!newsreader4.netcologne.de!news.netcologne.de!xlned.com!feeder1.xlned.com!newsfeed.xs4all.nl!newsfeed3.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail
Return-Path <msirenef@lightbird.net>
X-Original-To python-list@python.org
Delivered-To python-list@mail.python.org
X-Spam-Status OK 0.001
X-Spam-Evidence '*H*': 1.00; '*S*': 0.00; 'messages.': 0.04; 'newbie': 0.05; 'result,': 0.05; 'item.': 0.07; 'subject:skip:c 10': 0.07; '[1,': 0.09; 'compact': 0.09; 'dict': 0.09; 'python:': 0.09; 'bind': 0.16; 'googled': 0.16; 'received:74.55.86': 0.16; 'received:74.55.86.74': 0.16; 'received:smtp.webfaction.com': 0.16; 'received:webfaction.com': 0.16; 'subject:question.': 0.16; 'value:': 0.16; 'wanted.': 0.16; 'wrote:': 0.17; 'instance': 0.17; 'solution.': 0.18; '>>>': 0.18; 'variable': 0.20; 'question.': 0.20; 'trying': 0.21; 'not,': 0.21; "haven't": 0.23; "i've": 0.23; 'tried': 0.25; 'header:In-Reply-To:1': 0.25; 'header:User- Agent:1': 0.26; 'question': 0.27; 'to?': 0.27; 'decide': 0.28; 'case,': 0.29; 'probably': 0.29; "i'm": 0.29; 'error': 0.30; 'lists': 0.31; 'gets': 0.32; 'like:': 0.33; 'to:addr:python-list': 0.33; 'version': 0.34; "can't": 0.34; 'list': 0.35; 'doing': 0.35; 'pm,': 0.35; 'add': 0.36; 'skip:{ 10': 0.36; 'method': 0.36; 'should': 0.36; 'enough': 0.36; 'possible': 0.37; 'does': 0.37; 'being': 0.37; 'subject:: ': 0.38; 'things': 0.38; 'sure': 0.38; 'performance': 0.39; 'to:addr:python.org': 0.39; 'received:192': 0.39; 'little': 0.39; 'received:192.168': 0.40; 'most': 0.61; 'profile': 0.61; 'more': 0.63; 'results': 0.65; 'answer.': 0.71; 'obvious': 0.71; 'goal': 0.74; 'inefficient': 0.91
Date Sat, 29 Dec 2012 15:09:57 -0500
From Mitya Sirenef <msirenef@lightbird.net>
User-Agent Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121011 Thunderbird/16.0.1
MIME-Version 1.0
To python-list@python.org
Subject Re: dict comprehension question.
References <724d4fea-606a-4503-b538-87442f6bcebc@ci3g2000vbb.googlegroups.com> <50DF4C00.2020505@lightbird.net>
In-Reply-To <50DF4C00.2020505@lightbird.net>
Content-Type text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding 7bit
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 <http://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 <http://mail.python.org/mailman/listinfo/python-list>, <mailto:python-list-request@python.org?subject=subscribe>
Newsgroups comp.lang.python
Message-ID <mailman.1438.1356811801.29569.python-list@python.org> (permalink)
Lines 57
NNTP-Posting-Host 2001:888:2000:d::a6
X-Trace 1356811801 news.xs4all.nl 6848 [2001:888:2000:d::a6]:34795
X-Complaints-To abuse@xs4all.nl
Xref csiph.com comp.lang.python:35772

Show key headers only | View raw


On 12/29/2012 03:01 PM, Mitya Sirenef wrote:
> On 12/29/2012 02:48 PM, Quint  Rankid wrote:
 >> Newbie question. I've googled a little and haven't found the answer.
 >>
 >> Given a list like:
 >> w = [1, 2, 3, 1, 2, 4, 4, 5, 6, 1]
 >> I would like to be able to do the following as a dict comprehension.
 >> a = {}
 >> for x in w:
 >> a[x] = a.get(x,0) + 1
 >> results in a having the value:
 >> {1: 3, 2: 2, 3: 1, 4: 2, 5: 1, 6: 1}
 >>
 >> I've tried a few things
 >> eg
 >> a1 = {x:self.get(x,0)+1 for x in w}
 >> results in error messages.
 >>
 >> And
 >> a2 = {x:a2.get(x,0)+1 for x in w}
 >> also results in error messages.
 >>
 >> Trying to set a variable to a dict before doing the comprehension
 >> a3 = {}
 >> a3 = {x:a3.get(x,0)+1 for x in w}
 >> gets this result, which isn't what I wanted.
 >> {1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1}
 >>
 >> I'm not sure that it's possible to do this, and if not, perhaps the
 >> most obvious question is what instance does the get method bind to?
 >>
 >> TIA
 >
 > Will this do?:
 >
 > >>> w = [1, 2, 3, 1, 2, 4, 4, 5, 6, 1]
 > >>> {x: w.count(x) for x in w}
 > {1: 3, 2: 2, 3: 1, 4: 2, 5: 1, 6: 1}
 >
 >
 > - mitya
 >

I should probably add that this might be inefficient for large lists as
it repeats count for each item. If you need it for large lists, profile
against the 'for loop' version and decide if performance is good enough
for you, for small lists it's a nice and compact solution.

In a more general case, you can't refer to the list/dict/etc
comprehension as it's being constructed, that's just not a design goal
of comprehensions.

  -m

-- 
Lark's Tongue Guide to Python: http://lightbird.net/larks/

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


Thread

dict comprehension question. Quint Rankid <qbr567@gmail.com> - 2012-12-29 11:48 -0800
  Re: dict comprehension question. Roy Smith <roy@panix.com> - 2012-12-29 14:58 -0500
  Re: dict comprehension question. Mitya Sirenef <msirenef@lightbird.net> - 2012-12-29 15:01 -0500
  Re: dict comprehension question. Mitya Sirenef <msirenef@lightbird.net> - 2012-12-29 15:09 -0500
  Re: dict comprehension question. Joel Goldstick <joel.goldstick@gmail.com> - 2012-12-29 15:15 -0500
  Re: dict comprehension question. Peter Otten <__peter__@web.de> - 2012-12-29 21:32 +0100
  Re: dict comprehension question. MRAB <python@mrabarnett.plus.com> - 2012-12-29 20:39 +0000
  Re: dict comprehension question. Mitya Sirenef <msirenef@lightbird.net> - 2012-12-29 16:40 -0500
  Re: dict comprehension question. Terry Reedy <tjreedy@udel.edu> - 2012-12-29 18:22 -0500
  Re: dict comprehension question. Terry Reedy <tjreedy@udel.edu> - 2012-12-29 18:56 -0500
    Re: dict comprehension question. Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2013-01-01 03:10 +0000
      Re: dict comprehension question. 88888 Dihedral <dihedral88888@googlemail.com> - 2013-01-01 00:40 -0800
  Re: dict comprehension question. Tim Chase <python.list@tim.thechases.com> - 2012-12-29 18:26 -0600
  Re: dict comprehension question. Joel Goldstick <joel.goldstick@gmail.com> - 2012-12-29 23:10 -0500

csiph-web