[Python Fennel Bean シリーズ] 辞書の統合
Python でプログラミングする場合、同じ目的を達成するためにさまざまな方法を使用すると興味深い場合があります。魯迅作品の孔毅を思い出します。Kong Yiji は、ウイキョウ豆を表すフェンネルという単語の 4 つの書き方について多くの研究を行いました。私自身を Kong Yiji と比較するつもりはありません。そこで、すべてのプログラマーが楽しめるように、ここで Python フェンネル豆をいくつか集めます。
辞書 x と辞書 y があり、BOSS はそれらをマージして、x と y を変更しないまま新しい辞書 z を生成する必要があるとします。得られる効果は以下の通りです。
x = {
'a': 1, 'b': 2}
y = {
'b': 8, 'c': 9}
加工後
z = {
'a': 1, 'b': 8, 'c': 9}
超初心者としては、次のようなアプローチが考えられます。
>>> x = {
'a': 1, 'b': 2}
>>> y = {
'b': 8, 'c': 9}
>>> z = {
}
>>> for k, v in x.items():
z[k] = v
>>> for k, v in y.items():
z[k] = v
>>> z
{
'a': 1, 'b': 8, 'c': 9}
ミッション完了!
しかし、この解決策は明らかにコン・イージさんを満足させなかったので、彼はフェンネル豆を数え始めました。
フェンネルビーン 1: 更新
Python のバージョンが 3.4 以下の場合は、次の方法が最も一般的です。
>>> z = x.copy()
>>> z.update(y)
>>> z
{
'a': 1, 'b': 8, 'c': 9}
フェンネルビーン II: 二つの小さな星
2 を完全に放棄し、Python バージョンが 3.5 以上の場合は、次のようにすることができます。
>>> z = {
**x, **y}
>>> z
{
'a': 1, 'b': 8, 'c': 9}
フェンネルビーンズ 3: 縦棒
何?Python のバージョンは 3.9 以上ですか? よし:
>>> z = x | y
>>> z
{
'a': 1, 'b': 8, 'c': 9}
フェンネルビーン 4: ChainMap
ChainMap は多くの開発者にとって少し馴染みのないものかもしれませんが、その特徴は「第一印象」にありますので、2 つの辞書の順序に注意してください。
>>> from collections import ChainMap
>>> z = dict(ChainMap(y, x))
>>> z
{
'a': 1, 'b': 8, 'c': 9}
フェンネルビーンズ 5: 辞書
dict は素晴らしいものです。例をいくつか示します。ただし、使用はお勧めしません。
なぜ?エレガントさが足りません。
>>> z = dict(x, **y) # 仅限于字典的 Key 均为 string 时有效
>>> z = dict(x.items() + y.items()) # Python 2
>>> z = dict(x.items() | y.items())