Pythonの話題:辞書の結合(再論)

辞書の結合を議論した。「ばらす」演算子(**)を使った以下のような方法を紹介した。


d = dict(**d1, **d2)

これはスマートに見える方法であるが、万能ではない。

例を示す:


>>> d1 = dict()
>>> d1[1]='one'
>>> d1[2]='two'
>>> d2=dict()
>>> d2[3]='three'
>>> d2[4]='four'
>>> d=dict(**d1, **d2)
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in 
    d=dict(**d1, **d2)
TypeError: keywords must be strings
>>

つまりキーが文字列以外のときは上記の方法は使えないことになる。


d1.update(d2)

とする方法もあるが、d1が書き換えられてしまうので面白くない。

以下のような関数はどうだろうか


def dict_merge(d1, d2):
    """二つの辞書d1,d2を結合して新たな辞書d
を返す関数"""
    d = dict()
    for key, item in d1.items():
        d[key] = item
    for key, item in d2.items():
        d[key] = item

    return d

d1=dict()
d1[1] = 'one'
d1[2] = 'two'
print(d1)
d2=dict()
d2[3] = 'three'
d2[4] = 'four'
print(d2)

d = dict_merge(d1, d2)
print(d)

追記:
コマンドで書ける:


d=dict(list(d1.items()) + list(d2.items()))

 

核兵器禁止条約批准44ヵ国目:セントクリストファー・ネビス

今朝の新聞で目に留まった記事のタイトルである。

この条約の発効には最低でも50ヵ国での批准が必要であるが、セントクリストファー・ネビスでの批准で、条約の発効にはあと6ヵ国となった。

核兵器禁止条約は2017年に122ヵ国によって採択されたが、50ヵ国目の批准書が国連に寄託された後90日で発効する。

セントクリストファー・ネビスはカリブ海にある国で人口約5万3千人。カリブ共同体(カリコム)に加盟している。

Pythonの話題:「ばらす」演算子(**)と(*)

Pythonでは可変長の引数を持つ関数を作ることができる。


def func( *arg, **kwarg):
    print(type(arg), arg)
    print(type(kwarg), kwarg)

func(1, 2, 3, k1=10, k2=20, k3=30)

結果の出力:


<class 'tuple'> (1, 2, 3)
<class 'dict'> {'k1': 10, 'k2': 20, 'k3': 30}
>>>

このように「ばらす」演算子(*)、(**)を使う。*argでは位置が固定されている実引数をタプルの形で引き取ることができ、**kwargでは、キーつきの引数を辞書の形で引き取ることができる。キー引数は文字列になっていることに注意。

 

Pythonの話題:辞書の結合

二つの辞書があるときそれらを結合して新たな辞書を作る方法:


>>> d=dict(k1=1, k2=2, k3=3, k4=4)
>>> print(d)
{'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
>>> d1=dict(k1=1, k2=2)
>>> d2=dict(k3=3, k4=4)
>>> d=dict(**d1,**d2)
>>> print(d)
{'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
>>> 

「ばらす」演算子(**)で辞書{‘k1’:1}はキー引数k1=1の形に展開される。文字列が引数名に変わることに注意。こうしてdictの引数にキー引数を与えて、二つの辞書を統合することができる。

「エッシャーが命を懸けて守った男、メスキータ」展

今朝の新聞の美術欄の展覧会の案内である。

サミユル・イェスルン・デ・メスキータは19世紀末から20世紀の当初にオランダで活躍した画家、版画家、デザイナーである。画像のように大胆に単純化された白黒の画面が印象的である。

ユダヤ人であった彼は1944年1月にアウシュビッツ強制収容所で死去。教え子の一人であったエッシャーは師の作品200点をアトリエから持ち出し戦争中も守りとうした。

記事は日本初の回顧展で宇都宮美術館

貝殻で作ったリャマ彫像:チチカカ湖底で発見

今日の朝刊の記事のタイトルである。

南米のペルーとボリヴィアの間にあるチチカカ湖周辺はインカ時代(~17世紀)の宗教儀式をおこなったところらしくこれまでも遺物が発見されていた。

今回の発見はベルギーの研究者たちによるもので写真のように石で作ったはこの中に、貝殻を彫って作った小さいリャマの彫像と小さい円筒形の金箔が入っていた。この貝殻は遠く離れた赤道直下のエクアドルで採れたものである由。

能の物語(白洲正子著)

「能の物語」(白洲正子著)という本がある。能で演じられる代表作を舞台で表現される情景を織り交ぜながらそれらの物語を綴ったものである。

井筒(いづつ)
鵺(ぬえ)
頼政(よりまさ)
実盛(さねもり)
二人静(ふたりしずか)
葵上(あおいのうえ)
藤戸(ふじと)
熊野(ゆや)
俊寛(しゅんかん)
巴(ともえ)
敦盛(あつもり)
清経(きよつね)
忠度(ただのり)
大原御幸(おおはらごこう)
船弁慶(ふなべんけい)
安宅(あたか)
竹生島(ちくぶしま)
阿漕(あこぎ)
桜川(さくらがわ)
隅田川(すみだがわ)
道成寺どうじょうじ)

敦盛(あつもり)、清経(きよつね)、船弁慶(ふなべんけい)、安宅(あたか)等、悲劇のヒーローを題材としたものが多い。

説経節の世界:信田妻(葛の葉)

村上天皇の時代、河内国のひと石川悪右衛門は妻の病気をなおすため、兄の蘆屋道満の占いによって、和泉国和泉郡信太の森(現在の大阪府和泉市)に行き、野狐の生き肝を得ようとする。摂津国東生郡安倍野(現在の大阪府大阪市阿倍野区)に住んでいた安倍保名(伝説上の人物とされる)が信太の森を訪れた際、狩人に追われていた白狐を助けてやるが、その際にけがをしてしまう。そこに葛の葉という女性がやってきて、保名を介抱して家まで送りとどける。葛の葉が保名を見舞っているうち、いつしか二人は恋仲となり、結婚して童子丸という子供をもうける(保名の父郡司は悪右衛門と争って討たれたが、保名は悪右衛門を討った)。童子丸が5歳のとき、葛の葉の正体が保名に助けられた白狐であることが知れてしまう。全ては稲荷大明神(宇迦之御魂神)の仰せである事を告白し、さらに次の一首を残して、葛の葉は信太の森へと帰ってゆく。

恋しくば尋ね来て見よ 和泉なる信太の森のうらみ葛の葉

この童子丸が、陰陽師として知られるのちの安倍晴明である。保名は書き置きから、恩返しのために葛の葉が人間世界に来たことを知り、童子丸とともに信太の森に行き、姿をあらわした葛の葉から水晶の玉と黄金の箱を受け取り別れる。なおこの水晶の玉と黄金の箱は、稲荷大明神(宇迦之御魂神)から葛の葉が童子丸に授ける様に仰せを受けて預かっていた。数年後、童子丸は晴明と改名し、天文道を修め、母親の遺宝の力で天皇の病気を治し、陰陽頭に任ぜられる。しかし、蘆屋道満に讒奏され、占いの力くらべをすることになり、結局これを負かして、道満に殺された父の保名を生き返らせ、朝廷に訴えたので、道満は首をはねられ、晴明は天文博士となった。

このブログでも晴明に関連する星祭りを紹介したことがある。