LoginSignup
2
8

More than 3 years have passed since last update.

Pythonの辞書についてさらっと

Last updated at Posted at 2019-06-01

はじめに

Pythonをほとんど使ったことがなかったのですが,Pythonで辞書(dict型)を使う必要があり,少し勉強しました.
備忘録として残します.よかったらご活用します.

辞書とは

C++におけるstd::mapである。
雑に言うと,文字列(key)と数値(value)がセットになったもの.
Pythonドキュメントでは

辞書は キー(key): 値(value) のペアの集合であり、キーが (辞書の中で)一意でければならない
と説明されている.

辞書の生成

キーと値で生成

generate_dictionary
dic = {'key1': val1, 'key2': val2}

空の辞書の生成

generate_empty_dictionary
dic = {}

辞書の追加

add_dictionary
dic['key1'] = val1

コメントで教えていただいた事だが,スペース,改行区切りの文字列(str型)と数値(int型)を辞書に変換するために,以下のようにすることができる.

str_to_dict
dic = {}
str1 = ["hello", "world"]
val1 = [1, 2]
dic = dict(zip(str1, val1))

辞書の値の変更

change_value
dic['key1'] = val2

辞書の出力

0からnumまで出力する場合は以下.

output_dictionary_1
for i in range(num):
    print(dic[i])

辞書を全て出力する場合は以下.

output_dictionary
for t in dic.items():
    print(t)

ソート

いろんなページを参考にしたので,参考は後述する.

keyで昇順

key_sort_ascending_order
dic_s = sorted(dic.items())

keyで降順

降順にするためにはreverse=Trueをつけると良い.

key_sort_descending_order
dic_s = sorted(dic.items(), reverse=True)

valueで昇順

valueでソートするためにはkey=lambda x:x[1]をつけると良い.

value_sort_ascending_order
dic_s = sorted(dic.items(), key=lambda x:x[1])

valueで降順

key_sort_descending_order
dic_s = sorted(dic.items(), reverse=True, key=lambda x:x[1])

key-valueで昇順-昇順

key-valueの両方でソートするためにはkey=lambda x:(x[1],x[0])をつけると良い.

key-value_sort_ascend-ascend
dic_s = sorted(dic.items(), key=lambda x:(x[1], x[0]))

key-valueで降順-降順

key-value_sort_descend-descend
dic_s = sorted(dic.items(), reverse=True, key=lambda x:(x[1], x[0]))

key-valueで昇順-降順

これは,調べてもなかなか出てこなかったので,少し上のlambda式を変更して作成した.
key-valueのソートで昇順と降順を混合するために,ここではkey=value x:(-x[1], x[0])とした.
ソートを2回連続で使う方法もあり,そのためには後述するlistdictに変換する方法が必要であった.

key-value_sort_ascend-ascend
dic_s = sorted(dic.items(), key=lambda x:(-x[1], x[0]))

key-valueで降順-昇順

上で述べた昇順-降順ソートを反転することでできた.

key-value_sort_ascend-ascend
dic_s = sorted(dic.items(), reverse=True, key=lambda x:(-x[1], x[0]))

ソートしてlistになってほしくない場合

以上で例に挙げた書き方では,ソート後にはlist型になっておった.これをdict型にするためには以下の方法がある.

list_to_dict_1
dic = {k: v for (k, v) in dic_s.items()}
list_to_dict_2
dic = dict(dic_s.items())

以下のようにすると,ソートと変換を同時に行うことができた.

sort_to_dict
dic = dict(sorted(dic.items()))

参考

おわりに

今回はさらっと撫でるようにしか書かなかったのですが,また使う機会があればその都度更新しようと思います.

2
8
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
8