[python]辞書(ハッシュ)のデータを値の順でソートする

カテゴリ: python

 pythonでは他の言語で連想配列/ハッシュに相当するデータ構造として、辞書(Dictionary)型というものがあります。

pythonの辞書データを値の順や、キーの順でソートするサンプルコードを紹介します。

サンプルコード

変数dataに入ったデータの並び替えを行なっています。

data = {
    'data2':50,
    'data1':20,
    'data4':10,
    'data3':80,
}

print("# ソート前のデータ --------------------------------------------")
print(data)

# 1要素づつ取り出す
for key in data.keys():
    print(key, data[key])


print("# キーを元にdataをソート --------------------------------------")
results = sorted(data.items())
print(results)

# 1要素づつ取り出す
for key, value in results:
    print(key, value)


print("# キーを元にdataをソート(逆順) --------------------------------")
results = sorted(data.items(), reverse = True)
print(results)

# 1要素づつ取り出す
for key, value in results:
    print(key, value)


print("# 値を元にdataをソート ----------------------------------------")
results = sorted(data.items(), key=lambda x:x[1])
print(results)

# 1要素づつ取り出す
for key, value in results:
    print(value, key)

実行結果

元データのdataは辞書になっているのに対して、ソート後のresultsはリスト(配列)になっており、配列内の各要素がタプルというデータ構造に変わっています。

これは、pythonの辞書データ構造は各要素の順序を管理できないためsorted()関数がデータ構造を変えた形で結果を返しているためです。

$ python aa.py
# ソート前のデータ --------------------------------------------
{'data2': 50, 'data1': 20, 'data4': 10, 'data3': 80}
data2 50
data1 20
data4 10
data3 80

# キーを元にdataをソート --------------------------------------
[('data1', 20), ('data2', 50), ('data3', 80), ('data4', 10)]
data1 20
data2 50
data3 80
data4 10

# キーを元にdataをソート(逆順) --------------------------------
[('data4', 10), ('data3', 80), ('data2', 50), ('data1', 20)]
data4 10
data3 80
data2 50
data1 20

# 値を元にdataをソート ----------------------------------------
[('data4', 10), ('data1', 20), ('data2', 50), ('data3', 80)]
10 data4
20 data1
50 data2
80 data3
こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。