diadia

興味があることをやってみる。自分のメモを残しておきます。

python dictから最大値関連の情報を取り出す

何らかの状況で連続した入力に応じてその数をカウントする必要があるとする。このカウントは辞書型データにするとデータの取り扱いが楽になると思われる。問題は辞書型データから最大値や最小値の関連情報をいかにして取得するか。

例えば100人の血液型データが順々に入力される。

 

O
A
B
O
O
...
A

 

その場合以下の感じで辞書型データを作ればよい。

# 血液型データの入力
blood = {}
for n in list(range(0,100):
    data = input()
    blood.setdefault(str(data), 0)

 

最大値関連情報の取り出し

辞書型データの値において最大値、最小値を取り出すのは、max()関数やmin()関数を使うことで取り出すことができる。<br/ > max関数やmin関数は引数がシーケンスなので値のリストデータを作成する必要がある。また以下のようにすれば、max値,min値のキーを取得することもできる。

# 多い血液型の出力、その人数を出力
max_number = max([v for v in blood.values() ])
print("血液型人数", max_number)

keys = [k for k,v in blood.items() if int(v) == max_number ]
for key in keys :
    print("血液型")
    print(key)
    

 

辞書の値のソート

値のソートは値のリストを作成し、soreted()関数に値のリストを引数として渡すと昇順のリストを戻り値として取得できる。
キーを値に応じて昇順に直す場合には以下のようにすれば良い。

value_list = [1,2,3,4,5,6,7] #昇順にして準備 
key_list = list()

for n in range(0, len(value_list)):
    for k,v in dict_data.items():
        if v == value_list[n]:
            key_list.append(k)
        else:
            continue

上記の状況は値がすべて一つずつを想定している。
値が重複する場合には以下のようにする。

value_list = [1,2,3,3,3,4,5,6,7] #昇順にして準備 
key_list = list()

for n in range(0, len(value_list)):
    for k,v in dict_data.items():
        if v == value_list[n] and k not in key_list:
            key_list.append(k)
        else:
            continue