Pythonの辞書型についてのTIPS
Pythonの辞書型についてのあれこれメモ代わりのTIPS
Contents
Keyが存在しない場合のエラーを回避(getメソッド)
dictに存在しないKeyを指定して値を取ろうとするとエラーになります。
test = {"A":"a", "B":"b", "C":"c"}
a = test["AA"]
Traceback (most recent call last):
File "Main.py", line 6, in <module>
a = test["AA"]
KeyError: 'AA'
getメソッドを使うとKeyがない場合でもエラーにならなくなる。
第1引数はKeyで、第2引数はKeyが存在しなかった場合に代入される任意の値になります。指定しないとNoneになります。
test = {"A":"a", "B":"b", "C":"c"}
a = test.get("AA")
b = test.get("AA", "Key is not fount")
print(a)
print(b)
None
Key is not fount
複数の値を、複数の変数に一度に代入(分割代入)
辞書型で格納されている様々な値を変数に代入したいとき、例えばこんな感じで取るわけですが
test = {"A":"a", "B":"b", "C":"c"}
a = test["A"]
b = test["B"]
c = test["C"]
これを1行で収めたいっていうときに使う方法
from operator import itemgetter
test = {"A":"a", "B":"b", "C":"c"}
a, b, c = itemgetter("A","B","C")(test)
こうするだけで1行で書けちゃう。
ただ、このやり方だと存在しないKeyを指定するとエラーになる。
dictのgetメソッドのようなことはできない
その代わり、Keyの順番とかも気にせず好きなように引っ張ってこれるので少しだけソースがスッキリする。
dictの中身をKeyでソートする
test = {"D":"d", "C":"c", "B":"b", "A":"a"}
test_list = sorted(test.items(), key=lambda x: x[0])
test.clear()
test.update(test_list)
print(test)
{'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}
dictをitemsでlistとしてソートし、dictに直している。
dictのリストを値でソートする
from operator import itemgetter
dict_list = [
{
"name": "Tom",
"age": 20
},
{
"name": "Tom",
"age": 10
},
{
"name": "Bob",
"age": 19
},
]
dict_list = sorted(dict_list, key=itemgetter("name"))
print(dict_list)
[{'name': 'Bob', 'age': 19}, {'name': 'Tom', 'age': 20}, {'name': 'Tom', 'age': 10}]
operator.itemgetterを使って、dictのlistを特定のKeyの値でソートしている。
itemgetterの引数には複数のKeyを指定でき、ソートの優先順位に対応する。
from operator import itemgetter
dict_list = [
{
"name": "Tom",
"age": 20
},
{
"name": "Tom",
"age": 10
},
{
"name": "Bob",
"age": 19
},
]
dict_list = sorted(dict_list, key=itemgetter("name", "age"))
print(dict_list)
[{'name': 'Bob', 'age': 19}, {'name': 'Tom', 'age': 10}, {'name': 'Tom', 'age': 20}]
この例ではnameでソートしているが、nameが同値の場合はageでソートされるようになる。
ディスカッション
コメント一覧
まだ、コメントがありません