Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Re: dict comprehension

Reply
Thread Tools

Re: dict comprehension

 
 
Terry Reedy
Guest
Posts: n/a
 
      02-01-2008

"Daniel Fetchinson" <> wrote in message
news:fbe2e2100801312151x7136d1bbu3498d7d21728100e@ mail.gmail.com...
| Hi folks,
|
| There is a withdrawn PEP about a new syntax for dict comprehension:
| http://www.python.org/dev/peps/pep-0274/ which says:

I believe both set and dict comprehensions will be in 3.0.



 
Reply With Quote
 
 
 
 
Arnaud Delobelle
Guest
Posts: n/a
 
      02-01-2008
On Feb 1, 6:21*am, "Terry Reedy" <tjre...@udel.edu> wrote:
> "Daniel Fetchinson" <fetchin...@googlemail.com> wrote in message
>
> news:fbe2e2100801312151x7136d1bbu3498d7d21728100e@ mail.gmail.com...
> | Hi folks,
> |
> | There is a withdrawn PEP about a new syntax for dict comprehension:
> |http://www.python.org/dev/peps/pep-0274/which says:
>
> I believe both set and dict comprehensions will be in 3.0.


Python 3.0a1+ (py3k:59330, Dec 4 2007, 18:44:39)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> {x*x for x in range(10)}

{0, 1, 4, 81, 64, 9, 16, 49, 25, 36}
>>> {x*x for x in range(10)}

{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
>>>


That's nice.

--
Arnaud

 
Reply With Quote
 
 
 
 
Wildemar Wildenburger
Guest
Posts: n/a
 
      02-01-2008
Arnaud Delobelle wrote:
>> I believe both set and dict comprehensions will be in 3.0.

>
> Python 3.0a1+ (py3k:59330, Dec 4 2007, 18:44:39)
> [GCC 4.0.1 (Apple Inc. build 5465)] on darwin
> Type "help", "copyright", "credits" or "license" for more information.
>>>> {x*x for x in range(10)}

> {0, 1, 4, 81, 64, 9, 16, 49, 25, 36}
>>>> {x*x for x in range(10)}

> {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
>

OK, not bad. But I don't really see how this is better than the
generator approach.

Also, what is that first thing? A valueless dict (and thus a set)?

/W
 
Reply With Quote
 
Stefan Behnel
Guest
Posts: n/a
 
      02-01-2008
Wildemar Wildenburger wrote:
> Arnaud Delobelle wrote:
>>> I believe both set and dict comprehensions will be in 3.0.

>>
>> Python 3.0a1+ (py3k:59330, Dec 4 2007, 18:44:39)
>> [GCC 4.0.1 (Apple Inc. build 5465)] on darwin
>> Type "help", "copyright", "credits" or "license" for more information.
>>>>> {x*x for x in range(10)}

>> {0, 1, 4, 81, 64, 9, 16, 49, 25, 36}
>>>>> {x*x for x in range(10)}

>> {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
>>

> OK, not bad. But I don't really see how this is better than the
> generator approach.


It's a literal syntax, just like you would do with a list, i.e. a list
comprehension. Why should you have list comps and no dict comps?


> Also, what is that first thing? A valueless dict (and thus a set)?


It's the literal set syntax added in 3.0. You can write

{1,2,3}

to get a set() or

{1:1,2:2}

to get a dict().

Stefan
 
Reply With Quote
 
Steven Bethard
Guest
Posts: n/a
 
      02-02-2008
Wildemar Wildenburger wrote:
> Arnaud Delobelle wrote:
>>> I believe both set and dict comprehensions will be in 3.0.

>>
>> Python 3.0a1+ (py3k:59330, Dec 4 2007, 18:44:39)
>> [GCC 4.0.1 (Apple Inc. build 5465)] on darwin
>> Type "help", "copyright", "credits" or "license" for more information.
>>>>> {x*x for x in range(10)}

>> {0, 1, 4, 81, 64, 9, 16, 49, 25, 36}
>>>>> {x*x for x in range(10)}

>> {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
>>

> OK, not bad. But I don't really see how this is better than the
> generator approach.


It's more than twice as fast:

>>> setup = "items = range(10)"
>>> timeit.Timer("dict((x, x * x) for x in items)", setup).timeit()

6.0559464959932114
>>> timeit.Timer("{x * x for x in items}", setup).timeit()

2.8347301821879682

It also doesn't build the unnecessary intermediate tuples:

>>> def dict_genexp(items):

.... return dict((x, x * x) for x in items)
....
>>> def dict_comp(items):

.... return {x * x for x in items}
....
>>> dis.dis(dict_genexp.__code__.co_consts[1])

2 0 LOAD_FAST 0 (.0)
>> 3 FOR_ITER 21 (to 27)

6 STORE_FAST 1 (x)
9 LOAD_FAST 1 (x)
12 LOAD_FAST 1 (x)
15 LOAD_FAST 1 (x)
18 BINARY_MULTIPLY
19 BUILD_TUPLE 2
22 YIELD_VALUE
23 POP_TOP
24 JUMP_ABSOLUTE 3
>> 27 LOAD_CONST 0 (None)

30 RETURN_VALUE
>>> dis.dis(dict_comp.__code__.co_consts[1])

2 0 BUILD_MAP 0
3 DUP_TOP
4 STORE_FAST 1 (_[1])
7 LOAD_FAST 0 (.0)
>> 10 FOR_ITER 21 (to 34)

13 STORE_FAST 2 (x)
16 LOAD_FAST 1 (_[1])
19 LOAD_FAST 2 (x)
22 LOAD_FAST 2 (x)
25 BINARY_MULTIPLY
26 ROT_TWO
27 LOAD_FAST 2 (x)
30 STORE_SUBSCR
31 JUMP_ABSOLUTE 10
>> 34 RETURN_VALUE


STeVe
 
Reply With Quote
 
bearophileHUGS@lycos.com
Guest
Posts: n/a
 
      02-02-2008
Steven Bethard:
> It also doesn't build the unnecessary intermediate tuples:


I see, but can't the interpreter improved to remove similar
intermediate tuples anyway? Is this a difficult thing to do?

Bye,
bearophile
 
Reply With Quote
 
Arnaud Delobelle
Guest
Posts: n/a
 
      02-03-2008
On Feb 2, 9:10*pm, bearophileH...@lycos.com wrote:
> Steven Bethard:
>
> > It also doesn't build the unnecessary intermediate tuples:

>
> I see, but can't the interpreter improved to remove similar
> intermediate tuples anyway?


Do you mean the compiler?

> Is this a difficult thing to do?


Yes, due to the HDNP (Highly Dynamic Nature of Python).

--
Arnaud

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Is there something similar to list comprehension in dict? Peng Yu Python 8 11-20-2009 08:37 PM
List comprehension in if clause of another list comprehension Vedran Furac( Python 4 12-19-2008 01:35 PM
Dict Comprehension ? Ernst-Ludwig Brust Python 5 10-07-2008 08:25 AM
RE: dict comprehension Ryan Ginstrom Python 3 02-01-2008 10:09 AM
dict comprehension Daniel Fetchinson Python 1 02-01-2008 06:10 AM



Advertisments