Python2 と Python3 の違い ~dict型~

Pythonでdict型のキーとバリューを取得して、バリューの値でソートしたい時があります。

Python2とPython3ではその際に違った処理をしなければなりません。

まずはPython2

Python 2.7.9 (default, Jun  8 2015, 23:36:11) 
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> d = {'a':5, 'b':2, 'c':9}
>>> key = d.keys()       #辞書のキーをリストで取得
>>> key
['a', 'c', 'b']
>>> count = d.values()   #辞書の値をリストで取得
>>> count
[5, 9, 2]
>>> key = np.array(key)
>>> count = np.array(count)
>>> key = key[count.argsort()]
>>> count.sort()
>>> count
array([2, 5, 9])
>>> key
array(['b', 'a', 'c'], 
      dtype='|S1')

次はPython3

Python 3.4.3 (default, Mar  5 2015, 21:43:46) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> d = {'a':5, 'b':2, 'c':9}
>>> key = d.keys()       #辞書のキーをdict_keysオブジェクトで取得
>>> key
dict_keys(['c', 'a', 'b'])
>>> count = d.values()   #辞書の値をdict_valuesオブジェクトで取得
>>> count
dict_values([9, 5, 2])
>>> key = list(key)      #リストに変換
>>> key
['c', 'a', 'b']
>>> count = list(count)  #リストに変換
>>> count
[9, 5, 2]
>>> key = np.array(key)
>>> count = np.array(count)
>>> key = key[count.argsort()]
>>> count.sort()
>>> count
array([2, 5, 9])
>>> key
array(['b', 'a', 'c'], 
      dtype='|S1')

Python3では、keysメソッドやvaluesメソッドでイテレータを返すことにより、

メモリの使用効率を落とさずにキーやバリューを取得できるそうです。