私が歌川です

@utgwkk が書いている

Python で2つの辞書をマージした新しい辞書を作りたいとき

要件

  • 辞書 d1d2 をマージして新しい辞書を作りたい.
  • 重複するキーがあった場合は d2 の値を優先することにする.
    • たとえば {'a': 1, 'b': 2}{'b': 3, 'c': 4} をマージすると {'a': 1, 'b': 3, 'c': 4} となってほしい.
  • マージをする過程で d1d2 の中身は書き換えたくない.

方法

dict(d1, **d2)

d2 をキーワード引数として展開して dict のコンストラクタに渡すという方法.

キーワード引数が与えられた場合、キーワード引数とその値が位置引数から作られた辞書に追加されます。既に存在しているキーが追加された場合、キーワード引数の値は位置引数の値を置き換えます。

組み込み型 — Python 3.9.0 ドキュメント

確かにそれらしいが謎ハックぽさが否めないので,いきなり披露されるとややびっくりしそう.

dict(d1.items() + d2.items())

dict.items() が返す (k, v) のリストを結合したリストをもとに dict を作るという方法. マージしているんだろうなあというのは式から見える気がするが,いちいちリストに変換するのでコストが大きい. Python3系では dict.items() がビューオブジェクトを返すようになったため,この方法は2系のみでしか使えない. itertools.chain を使うことでイテレータに対しても同等のことができる(追記参照).

dict(itertools.chain(d1.items(), d2.items())

newdict = dict(d1); newdict.update(d2)

一時変数 newdictd1 のコピーを作って,そこに d2 をマージするという方法. やっていることは一番素直なのではないだろうか. ただし一時変数が必要となる.

{**d1, **d2} (追記参照)

辞書リテラル内で辞書展開記法を使うという方法. 文字数が一番短かくてすっきりした印象があってよさそう. ただしPython3.5以上でしか使えない.

d1 | d2 (追記参照)

Python 3.9 にはついに辞書をマージして返す二項演算子が追加されたので、この記事は無用になりそう。もともとsetについてはそのような演算子があったので、その延長だと考えると自然?

>>> {'a': 1, 'b': 2} | {'b': 3, 'c': 4}
{'a': 1, 'b': 3, 'c': 4}

まとめ

newdict = dict(d1)
newdict.update(d2)

が一番素直かなあという感想.

辞書リテラルに対して直接マージしたい!! というときは,

newdict = dict({'a': 1, 'b': 2}, **d2)

とやるのがまあいいかなあと思っている. Python3.5以上なら,

{**d1, **d2}

のほうがスマートな感じがする(追記参照).

Python 3.9 以上なら d1 | d2 でよい。

追記

items 結合できないと思っていましたが itertools.chain でイテレータを連続させられるので確かに同等なことができますね. 辞書リテラルの中でもキーワード引数展開記法が使えるのは知らなかった…….この記法なら辞書リテラルに対しても直接マージできそう.

追記

Python 3.9 には、辞書をマージする二項演算子 | が追加されました。

www.python.org

THE IDOLM@STER CINDERELLA GIRLS 5thLIVE TOUR Serendipity Parade!!! 福岡公演に行った

手短にいきます.

神谷奈緒という存在がまるでそこにあるかのようなパフォーマンスに圧倒されるしかなかった. Memories はまったく予想できなかったですね.

Nothing but You もめちゃくちゃ良く,というか奈緒の声めちゃくちゃ通るから響いてくるんですよ……*1

あと,パッション種崎はやっぱりパッションだった*2し,好いとーよ選手権は全員キュートでFAだった.SSAでも期待しております.

次回予告

SSA両日の予定が確定しました.1日目は渋谷でLV,2日目は現地参加します. 初のSSAなので楽しみにしております.

*1:私は奈緒担当Pというわけでもないはずですが,なんでこんなに奈緒のことを書いているんだ.

*2:トークのたびに種崎さんの手がブンブン動きまくるの,見ていて全く飽きないし,そのまま続けてほしい.

誕生日プレゼントで届いたものを紹介します

utgwkk.hateblo.jp

utgwkk.hateblo.jp

このたび21歳になり,いろいろなものを頂きましたので,それらの紹介をします.

食料1です.東京に行くまでこれで食いつないでいこうと思います.ありがとうございます.

食料2です.タンパク質はこれで補給しようと思います.ありがとうございます.

ハッカドールのCDです.3号くんが好きです.ありがとうございます.

超 暇つぶし図鑑

超 暇つぶし図鑑

ARuFa さんのこれまでの面白暇潰しをまとめた本です.気持ちが終わってきたらまた読もうと思います.ありがとうございます.

大音量目覚まし時計です.後期になったらこれで遅刻ゼロを目指そうと思います.ありがとうございます.

獺祭(だっさい) 純米大吟醸45 720ml

獺祭(だっさい) 純米大吟醸45 720ml

獺祭です.これで優勝しようと思います.ありがとうございます.

アルファックス ふわもち リングクッション ピンク 606307

アルファックス ふわもち リングクッション ピンク 606307

枕にも座布団にもなるクッションです.腰に優しい生活を送ろうと思います.ありがとうございます.

まだまだお待ちしております!!!!!

21歳になった

表題の通り本日で21歳になりました.21回も誕生日を迎えているということになります.

20歳になったときの様子はこちら.とくに何も書いてなかった.

utgwkk.hateblo.jp

所感

学部3回生ということで実験の占めるコマ数と再履修している必修科目に辟易していましたがそれらはどうらやなんとかなっていそう. これまでの経験から,履修しまくっても全部取れるということはまずないと分かっていたためコマはやや少なめにし,さらに1科目履修取消をしました. 試験勉強の負担を考えれば仕方のないことだと思うようにしています. 私はそんなに要領は良くないし,あまり関心の湧かない科目にどんどん時間を取られることほど不幸はなかろう.

そういった様子なので3回生のうちに単位を揃えて4回では研究に全力を注ぐ,というわけにはどうやらいかなさそうですが,たくさん落としてダブるよりはマシやろ……. いま88単位あって,実験と必修科目が確定したとして6単位あるので,さらにあれとあれが確定したとしてこれで10単位,まあそれでも100単位は行くかなーというところ*1

後悔ばかり書いていてもどうにもならないので,順調な大学生活を送っているということになっています. ちゃんとやれば4年で卒業できるので順調すぎるほどに順調です. 高校の頃はいろいろハンドリングされた状態でうまくやっていたので,ほぼ一人でもここまでやっているというのは実際すごいことだと思うので,どんどん褒めてください. ここでは留とかそういうことはないし,今後もストレートで生きていくということになっているので,そういう話が聞きたいなら飲みに行きましょう.おいしいお酒によくつられます.

去年の1月ぐらいに何があったか不明ですがデレステにはまり,デレマス沼をやっていき,とうとうライブに行くようになり,家のサイリウムは3本に増えました. それに伴って出費も増えていますが,同時に楽しみが増え,隔週で感情をやられるという生活を送ってきています. ライブの面白いところは,普段聞いている曲がそこで聞けることと,普段聞かないようなメンツが歌っているのが聞けることが大きいと思っています. 今週末は福岡公演,そして8月にはSSA公演です.やっていきましょう.

大学のこと書いたら感情が無になってなにも書けなくなった. 生活と真正面から向き合うのしんどくない?

例によってこれを置いて締めくくります.

お祝いお待ちしております

Amazon ウィッシュリストです.

飲みもお待ちしております

7月末~8月1週目はやることが多いので,8月2週目以降がよさそうです.だいたい東京にいます.飲むぞ!!!!

*1:今期18単位あって,さきの6単位が確定しているとすれば行けそうに見えるが…….

THE IDOLM@STER CINDERELLA GIRLS 5thLIVE TOUR Serendipity Parade!!! 幕張公演ライブビューイングに行った

また書くタイミングを失っていた……. 今,安野さんがせり上がるのを見ながら記事を書いています.

www.youtube.com

ツイッター見返してみたらあまり情報量のあるツイートをしていなくて,たぶん酒を飲みながらぜんぶ垂れ流したんだろうなーという感じ.

全体曲からの*1開幕 Radio Happy は完全にずるく,没頭を持っていかれが発生しました. メルヘン∞メタモルフォーゼは絶対にライブでやってほしい*2と思っており,実際聞けたし,永遠の17歳にもなってあれだけアクロバティックなライブをこなすというのがすごい.

いままでの公演でもずっと Tulip をやるチャンスあった気がしたけどずっとやっていなくて,いつやるのかなーと思っていたら今回とうとうやってくれて,杜野さんがはしゃいでいてよかった.

次回予告

福岡公演を見るために福岡に行きます. こちらは唯一CD抽選で当たったものなので,座席にやや期待しております.

SSA公演ですが,1日目のライブビューイング確保できたので,都内の映画館で見ます. CD欲しさにいったん現地に向かうということもあると思います. 2日目も見たい.

*1:正確には最初の全体曲は見れてない.いろいろありました.

*2:これはニャンと☆スペクタクルに抱く感情と同じものです.

ICPC2017 国内予選に参加した

チーム Serendipity Parade として参加しました.結果は3完 (8125) で68位です.

本当はチームSSAにしたかったのですが,誰もSSAの抽選に通らなかったので来年までお預けとなりました.

http://icpc2017.yamagula.ic.i.u-tokyo.ac.jp/team/1294

メンバーは上のページの通りで,私が実装担当,ふたりが考察とデバッグ担当という感じになりました. 今年からは Python も使えるということで,全員Pythonが書けるというチームでしたが,結局私が最後までC++で実装しました.

A

全通り試せばよい.6:30でAC.

B

ちょっと面倒だなーと思いつつ軽い字句解析みたいなことをして比較した.28:44でAC.

C

重いかなーと思ったが制約がだいぶ甘いので長方形を全通り試す.添字をミスって2WAしたのがだいぶ悔しいですね.1:00:11 (+2) でAC.

D

制約を見るとmとnが同時に大きくなることはないらしいので,ハハーンこれを活用するんだなとは思ったが,どう活用するか分からず. 雑な全探索を走らせたが当然終わらない.

E

論理式の縮約だが,XORややこしそうだなあということで手をつけず.

F

チームメイトに考察してもらい,iと2nの大小によって上にあるか下にあるかが分かるので実装できそうですねとなったが,実装できず.これ通したかったですね…….

まとめ

だいたい実装しかしていないので、今度は自分でちゃんと解法を練ってからコードを書けるようになりたい。

ICPC2016 国内予選に参加しました - 私が歌川です

今年も手を動かせば解けるものしか実装してないのであまり変わってないですね. 来年は4完したい.

utgwkk.hateblo.jp