パスワードを忘れた? アカウント作成
15644173 journal
日記

masakunの日記: 第2.5章 コレクションの応用(すっきりPython 108~118頁) 2

日記 by masakun

☆☆☆ コレクションの相互変換 ☆☆☆

scores = {'network':60, 'database':80, 'security':60}
members = ['松田', '麻木', '工藤']
print(tuple(members)) #リストmembersをタプルに変換
print(list(scores)) #scores のキーをリストに変換
print(set(scores.values())) #scores の値をセットに変換
実行結果
('松田', '麻木', '工藤')
['network', 'database', 'security']
{80, 60}

ディクショナリへは、dict(zip(キーを格納したリスト,値を格納したリスト)) とすることで変換することができる。
kamoku = ['network', 'database', 'security', 'science']
scores = [60, 80, 60, 70]
gousei = dict(zip(kamoku,scores))
print(gousei)
実行結果
{'network': 60, 'database': 80, 'security': 60, 'science': 70}

☆☆☆ コレクションのネスト ☆☆☆
コレクションの中に別のコレクションを格納する。

〇ディクショナリ内にディクショナリをネスト
m_scores = {'network':60, 'database':80, 'security':50}
a_scores = {'network':70, 'database':75, 'security':90}
member_scores = {'松田':m_scores, '麻木':a_scores}
print(member_scores)
実行結果
{'松田': {'network': 60, 'database': 80, 'security': 50}, '麻木': {'network': 70, 'database': 75, 'security': 90}}

〇ディクショナリ内にセットをネスト
member_hobbies = {'松田':{'SNS','麻雀','自転車'}, '麻木':{'麻雀','数学','数学'}}
print(member_hobbies) # 全員の趣味一覧を表示する
print(member_hobbies['松田']) # 松田の趣味一覧を表示する
print(member_hobbies['麻木']) # 麻木の趣味一覧を表示する
実行結果
{'松田': {'SNS', '自転車', '麻雀'}, '麻木': {'数学', '麻雀'}}
{'SNS', '自転車', '麻雀'}
{'数学', '麻雀'}

※セットなので重複データはまとめられて出力。

〇リスト内にリスト(2次元リスト)

本丸写しの1桁の数字では全然イメージ湧かないので、新型コロナ (COVID-19)リアルタイム情報からデータをもらってきた。

hanrei = ['国名','感染者','回復者','死亡者','致死率']
ame = ['アメリカ',83356490,80836418,1023513,1.2]
ind = ['インド',43091393,42547699,523975,1.2]
bra = ['ブラジル',30502501,29602372,663816,2.2]
fra = ['フランス',28805690,27301021,146376,0.5]
deu = ['ドイツ',25116363,23000500,136405,0.5]
eng = ['イギリス',22090523,21395888,175546,0.8]
rus = ['ロシア',18211178,17578659,376560,2.1]
sko = ['南朝鮮',17438068,969524,23158,0.1]
jpn = ['日本国',8008115,7598239,29741,0.4]
hyo = [hanrei, ame, ind, bra, fra, deu, eng, rus, sko, jpn]
print(hyo) #リストhyo全体を参照
print(hyo[1]) #リストhyoのameを参照
print(hyo[-2][3]) #リストhyoのskoの死者数を参照
実行結果
[['国名', '感染者', '回復者', '死亡者', '致死率'], ['アメリカ', 83356490, 80836418, 1023513, 1.2], ['インド', 43091393, 42547699, 523975, 1.2], ['ブラジル', 30502501, 29602372, 663816, 2.2], ['フランス', 28805690, 27301021, 146376, 0.5], ['ドイツ', 25116363, 23000500, 136405, 0.5], ['イギリス', 22090523, 21395888, 175546, 0.8], ['ロシア', 18211178, 17578659, 376560, 2.1], ['南朝鮮', 17438068, 969524, 23158, 0.1], ['日本国', 8008115, 7598239, 29741, 0.4]]
['アメリカ', 83356490, 80836418, 1023513, 1.2]
23158

なるほど。

二重構造だけでなく三重構造以上のコレクションも作ることができ、本格的なデータ分析プログラムではネストしたコレクションの活用が欠かせないものとなっているそうだ。
なおディクショナリのキーにタプル以外のコレクションは使えないというルールがある。

☆☆☆ 集合演算 ☆☆☆(2つのセットの共通点や違いを探す処理)

〇セットの&演算
member_hobbies = {
        '松田': {'SNS', '麻雀', '自転車'},
        '麻木': {'麻雀', '食べ歩き', '数学', '数学', '数学'}
}
common_hobbies = member_hobbies['松田'] & member_hobbies['麻木']
print(common_hobbies)
実行結果
{'麻雀'}

〇四つの集合演算
A = {1, 2, 3, 4, 7}
B = {2, 3, 4, 5, 6}
print(A | B) #和集合
print(A & B) #積集合
print(A - B) #差集合
print(A ^ B) #対称差
実行結果
{1, 2, 3, 4, 5, 6, 7}
{2, 3, 4}
{1, 7}
{1, 5, 6, 7}

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

普通のやつらの下を行け -- バッドノウハウ専門家

読み込み中...