牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

辞書のキーと値を入れ替えをPythonでやってみた

#辞書のキーと値を入れ替えるスクリプト
dict_data = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}

#A-1
def d_change_a(d):
    di = {}
    for k in d:
        di[d[k]] = k
    return dict(di)
print d_change_a(dict_data)
#A-2
def d_change_a2(d):
    for k in d:
        d[d.pop(k)] = k
    return d
print d_change_a2(dict_data)


#B-1
print dict((lambda d:[(d[k], k) for k in d])(dict_data))
#B-2
def_lambda = lambda d:[(d[k], k) for k in d]
temp_list = def_lambda(dict_data)
print dict(temp_list)

#C
def d_change_c(d):
    return dict([(d[k], k) for k in d])
print d_change_c(dict_data)

#D(ocean-cityさんの情報)
print dict((v, k) for k, v in dict_data.iteritems())
結果
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4}
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4}
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4}
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4}
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4}

A-1はコードが冗長だけど読みやすい。
B-1はPythonぽくない感じ(||゚Д゚)
Cのリスト内包のがシンプルでいいかな。


もっとスマートな方法ある?


追記
コメントいただいたocean-cityさんのteritems使ったの(D)が一番シンプルでいい感じ。



速度編に続く