News for hackers. Stuff that matters.
Re:Why I Still Use Python for High Performance Scientific Co... by harshnisar on Wednesday December 02, 2015 @05:57AM (#10662231)
Can you explain the context in which .keys() is called often and is not appropriate and the alternative?
Re:Why I Still Use Python for High Performance Scientific Co... by dagw on Wednesday December 02, 2015 @06:24AM (#10662306)
.keys() returns a list (in python2) so if you write

  for k in dict.keys():
    ...
then python first builds a list of all the keys, loops through them and then throws away the list. If the dict is large, this can be quite expensive. The correct way is to either use .iterkeys() which returns an iterator which generates the keys one at a time, or simply iterate directly over the dict, saving you need to first copy all the keys into a list you'll just throw away.

This has been 'fixed' in python3 and .keys() now returns an iterable view of the keys, and if you actually want a list of the keys you have to explicit and write list(dict.keys())

Re:Why I Still Use Python for High Performance Scientific Co... by andreasvc on Wednesday December 02, 2015 @07:27AM (#10662516)
The easiest is to never use .keys() or .iterkeys(), and always iterate over the bare dict:

    for k in dict:
        ...

    if k in dict:
        ...
If you do need a list of keys, list(dict) has the advantage of working in both Python 2 and 3.
Re:Why I Still Use Python for High Performance Scientific Co... by sergiosgc on Wednesday December 02, 2015 @08:07AM (#10662685)
Just to clarify your python 2 note: In python 3 keys() returns an iterator, so there is no penalty (i.e. iterkeys was dropped, keys assumed iterkeys interface).

The equivalent python2 behaviour can be obtained using list(somedict.keys())