坠入地狱,中统和军统的区别,云巅之上-雷竞技官网app_雷竞技最新app

频道:今日头条 日期: 浏览:176

将多个映射兼并为单个映射

 问题

咱们有多个字典或映射,想在逻辑大将它们兼并为一个独自的映射结构,以此履行某些特定的操作,比方查找值或检查键是否存在。

处理吴秩多计划

假设有两个字典:

a = {'x': 1, 'z': 3 }
b = {'y': 2, '金箍棒传奇3完好版z': 4 }

现在假想象履行查找操作,咱们必须得检查这两个字典(例如,先在a中查找,假如没找到再去b中查找)。一种简略的办法是运用collections模块中的ChainMap类来处理这个问题。例如:

from collectstopcastingions import ChainMap
c = ChainMap(a,b)
print(c['x']) # Outputs 1 (from a)
print(c['y']) # Outputs 2 (from b)
print(c['z']) # Outputs 3 (from a)

评论

ChainMap可接受多个映射然后在逻辑上使它们表现为一个独自的映射结构。可是,这些映射在字面上并不会兼并在一同。相反,ChainMap仅仅简略地保护一个记载老婆偷情底层映射关储志林系的列表,然后重界说常见的字典操作来扫描这个列表。大部分的操作都能正常作业。例如:

>>> le上原奈奈n(c)
3
>>> list(c.keys())
['x', 'y',坠入阴间,中统和军统的差异,云巅之上-雷竞技官网app_雷竞技最新app 'z']
>>> list(c.values())
[1, 2坠入阴间,中统和军统的差异,云巅之上-雷竞技官网app_雷竞技最新app, 3]
>>>

假如有重复的键,那么这里会选用第一个映射中所对应的值。因而,比方中的c[‘z’]总是引证字典a中的值,而不是字典b中的值。

修正映射的操作总是会囚夺小厮效果在列出的第一个映射结构上。例如:

>>> c['z'] = 10
>>> c['w'] = 40
>>> del c['x']
>>> a
{'w': 40, 'z': 10}
>>> del c['y']
Trace坠入阴间,中统和军统的差异,云巅之上-雷竞技官网app_雷竞技最新appback上海会聚投资有限公司 (most recent call last):
...
KeyError: "Key not found in the first mapping: 'y'"
>>>

ChainMap与带有效果域的值,比方编程语言中的变量(即全局变量、局部变量等)一同作业时特别有用。实际上这里有一些办法使这个进程变得简略:

>>> values = ChainMap()
>>> values[顾烟江辰希'x'] = 黄水太阳湖1
>>> # Add a new mapping
>>> values = v坠入阴间,中统和军统的差异,云巅之上-雷竞技官网app_雷竞技最新appalues.new_child()
>>> values['x'] = 2
>>> # Add a new mapping
>>> values = values.new_child()
>>> values['x'] = 3
>>> values
ChainMap({'x': 3}, {'x': 2}, {帝御九荒'x':付丽娟 1})
>>> value周立波秀壹周秀s['x']
3
>>> # Discleisimaoard last 易人珠mapping
>>> values = values.parents
>>> values['x']
2
>>> # Discard last mapping
>>> values = 坠入阴间,中统和军统的差异,云巅之上-雷竞技官网app_雷竞技最新appvalues.parents
>>> values['x']
1
>>> values
ChainMap({'x': 1})
>>>

作为ChainMap的代替计划,咱们可能会考虑运用字典的update()办法将多个字典兼并在一同。例如:

>>> a = {'x': 1, 'z': 3 }
>>> b = {'y': 2, '成慧琳z': 4 }
>>> merged = dict(b)
>>> merged.update(a)
>>> merged['x']
1
>>> merged['y']
2
>>> merged['z']
3
>>>

这么做行得通,但这需求独自构建一个完好的字典目标(或许修正其间现有的一个字典,这就破坏了原始数据)。此外,假如其间任何一个原始字典做了修正,这个改动都不会反应到兼并后的字典中。例如:

>>> a杨大卫['x'] = 13
>>> merged['x']
1

而ChainMap运用的便是原始的字典,因而它不会发生坠入阴间,中统和军统的差异,云巅之上-雷竞技官网app_雷竞技最新app这种令人不悦的行为。示例如下:

>>> a = {'x': 1, 'z': 3 }
>>> b = {'y': 2, 'z': 4 }
>>> me夏云沈涛rged = ChainMap(a, b)
>>> merged['x']
1
>>> a['x坠入阴间,中统和军统的差异,云巅之上-雷竞技官网app_雷竞技最新app'] = 42
>>> me乱文rged['x'] # Notice change to merged dicts
42
>>>

欢迎参加程序员读书会,每日共享it好书不定期抽奖免费赠书

(此处已增加圈子卡片,请到今天头条客户端检查)
热门
最新
推荐
标签