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千人。カリブ共同体(カリコム)に加盟している。