チェーンChainmap

1592 ワード

ChainMapを使用すると、複数の辞書を1つの辞書として直列に処理できます.
from collections import ChainMap

user_dict1 = {"a": "xiaohong", "b": "xiaohua"}
user_dict2 = {"c": "xiaopang", "d": "xiaoming"}

new_dict = ChainMap(user_dict1, user_dict2)

print(new_dict)
# ChainMap({'a': 'xiaohong', 'b': 'xiaohua'}, {'c': 'xiaopang', 'd': 'xiaoming'})

直列に接続されたデータに直接アクセスできます
print(new_dict["c"])
# xiaopang

異なる辞書に同じプライマリ・キーがある場合、直列に接続されたデータを巡回すると、以前の
user_dict1 = {"a": "xiaohong", "b": "xiaohua"}
user_dict2 = {"b": "xiaopang", "d": "xiaoming"}
new_dict = ChainMap(user_dict1, user_dict2)

for key, value in new_dict.items():
    print(key, value)

# d xiaoming
# b xiaohua
# a xiaohong

新しいdictを動的に追加できます
# new_dict.new_child(new_dict)
#
# print(new_dict)
# for key, value in new_dict.items():
#     print(key, value)

mapsメソッドは、直列に接続された辞書をリスト形式で表示します.
print(new_dict.maps)
# [{'a': 'xiaohong', 'b': 'xiaohua'}, {'c': 'xiaopang', 'd': 'xiaoming'}]

ChainMapはソースデータのコピーではなく、ソースデータを指します
new_dict.maps[0]["a"] = "pangzi"

print(new_dict)
# ChainMap({'a': 'pangzi', 'b': 'xiaohua'}, {'c': 'xiaopang', 'd': 'xiaoming'})