zoukankan      html  css  js  c++  java
  • 【python cookbook】【数据结构与算法】20.将多个映射合并为单个映射

    问题:在逻辑上将多个字典或映射合并为一个单独的映射结构,以此执行某些特定的操作,比如查找值或者检查键是否存在

    解决方案:利用collections模块中的ChainMap类

    ChainMap可接受多个映射然后在逻辑上使它们表现为一个单独的映射结构。这些映射在字面上并不会合并在一起。相反,ChainMap只是简单地维护一个记录底层映射关系的列表,然后重定义常见的字典操作来扫描这个列表。

    # example.py
    #
    # Example of combining dicts into a chainmap
    
    a = {'x': 1, 'z': 3 }
    b = {'y': 2, 'z': 4 }
    
    # (a) Simple example of combining
    from collections 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)
    
    # Output some common values
    print('len(c):', len(c))
    print('c.keys():', list(c.keys()))
    print('c.values():', list(c.values()))
    
    # Modify some values
    c['z'] = 10
    c['w'] = 40

    print("a:", a) del c['x'] print("a:", a) # Example of stacking mappings (like scopes) values = ChainMap() values['x'] = 1 # Add a new mapping values = values.new_child() values['x'] = 2 # Add a new mapping values = values.new_child() values['x'] = 3 print(values) print(values['x']) # Discard last mapping values = values.parents print(values) print(values['x']) # Discard last mapping values = values.parents print(values) print(values['x'])
    >>> ================================ RESTART ================================
    >>> 
    1
    2
    3
    len(c): 3
    c.keys(): ['y', 'x', 'z']
    c.values(): [2, 1, 3]
    a: {'x': 1, 'z': 10, 'w': 40}
    a: {'z': 10, 'w': 40}
    ChainMap({'x': 3}, {'x': 2}, {'x': 1})
    3
    ChainMap({'x': 2}, {'x': 1})
    2
    ChainMap({'x': 1})
    1
    >>> 

    另外ChainMap操作的是原始字典,可以避免一些令人不悦的行为,例如其中任何一个原始字典的修改无法反应到合并后的字典中。

    >>> a={'x':1,'z':3}
    >>> b={'y':2,'z':4}
    >>> merged=ChainMap(a,b)
    >>> merged
    ChainMap({'x': 1, 'z': 3}, {'y': 2, 'z': 4})
    >>> merged['x']
    1
    >>> a['x']=55
    >>> merged['x']
    55
    >>> merged
    ChainMap({'x': 55, 'z': 3}, {'y': 2, 'z': 4})
    >>> 
  • 相关阅读:
    webstorm破解
    macos-WebStorm安裝
    CocoaPods安装与使用
    前端之HTML
    python调用百度语音(语音识别-斗地主语音记牌器)
    MySQL学习笔记(二)
    MySQL学习笔记(一)
    python网络编程
    计算机网络基础
    python之hashlib、configparser、logging模块
  • 原文地址:https://www.cnblogs.com/apple2016/p/5751301.html
Copyright © 2011-2022 走看看