dict evaluation order

ふむ。

% python2.6 --version
Python 2.6.1
% cat dict_test.py
def f():
    a, b = 1, 2
    return { a: b }

import dis
dis.dis(f)
% python2.6 dict_test.py
  2           0 LOAD_CONST               3 ((1, 2))
              3 UNPACK_SEQUENCE          2
              6 STORE_FAST               0 (a)
              9 STORE_FAST               1 (b)

  3          12 BUILD_MAP                1
             15 LOAD_FAST                1 (b)
             18 LOAD_FAST                0 (a)
             21 STORE_MAP           
             22 RETURN_VALUE        

ドキュメントとバイトコードから推測するに、STORE_MAP は

TOS2[TOS] = TOS1

という意味っぽい。(TOS がスタックトップ、TOS1、TOS2 が 2番目、3番目の要素)
と考えれば、value のほうを先に評価するほうが都合が良さそうだ。

Python 2.5 だとどうか。

% python2.5 --version
Python 2.5.4
% python2.5 dict_test.py 
  2           0 LOAD_CONST               3 ((1, 2))
              3 UNPACK_SEQUENCE          2
              6 STORE_FAST               0 (a)
              9 STORE_FAST               1 (b)

  3          12 BUILD_MAP                0
             15 DUP_TOP             
             16 LOAD_FAST                1 (b)
             19 ROT_TWO             
             20 LOAD_FAST                0 (a)
             23 STORE_SUBSCR        
             24 RETURN_VALUE        

こちらは専用命令はなく、通常の添え字によるアクセスと同様の命令。STORE_SUBSCR は

TOS1[TOS] = TOS2

なので、やはり value を先に評価するほうが都合が良いという。