• Python字典


    1. 字典概述 

      字典是Python基本数据结构——映射。字典包含了一个索引的集合,被称为键 (keys),和一个值 (values) 的集合。字典中的值存储在键下,不按顺序排列,键几乎可以是任意类型。
      一个键对应一个值。这种一一对应的关联被称为键值对 (key-value pair) ,有时也被称为 (item)。

    2. 使用字典的一些经验

    2.1  copy() 和 deepcopy()

      当替换副本中的值时,原件不受影响。然而,如果
        修改副本中的值(就地修改而不是替换),原件也将发生变化,
        因为原件指向(引用)的也是被修改的值(如这个示例中的'machines'列表所示)。

    >>> x = {'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
    >>> y = x.copy()
    >>> y['machines'].insert(1,1001)
    >>> y
    {'username': 'mlh', 'machines': ['foo', 1001, 'bar', 'baz']}
    >>> x
    {'username': 'admin', 'machines': ['foo', 1001, 'bar', 'baz']}

      为避免这种问题,可使用模块copy中的函数deepcopy。deepcopy 执行深复制,即同时复制值及其包含的所有值。

    >>> from copy import deepcopy
    >>> d = {}
    >>> d['names'] = ['Alfred', 'Bertrand']
    >>> c = d.copy()
    >>> dc = deepcopy(d)
    >>> d['names'].append('Clive')
    >>> c
    {'names': ['Alfred', 'Bertrand', 'Clive']}
    >>> dc
    {'names': ['Alfred', 'Bertrand']}  

    2.2 get() 方法

      方法get为访问字典项提供了宽松的环境。通常,如果你试图访问字典中没有的项,将引发错误。而使用get不会这样,这在进行字典值计算操作时不希望引发错误(用0代替,忽略不存在项)时特别有用

    >>> d = {}
    >>> print(d['score'])
    Traceback (most recent call last):
      File "<pyshell#38>", line 1, in <module>
        print(d['score'])
    KeyError: 'score'
    >>> print(d.get('name',0))
    0
    >>> d
    {}

    2.2 keys() 方法

      方法keys返回一个字典视图,视图包含指定字典中的键。可以对字典视图进行并集操作(像集合操作一样),结果是一个集合

    >>> a = {1:1, 2:2}
    >>> b = {3:3, 4:4}
    >>> a.keys()|b.keys() # 结果是集合,说明字典的键是唯一
    {1, 2, 3, 4}

    3. 字典常用方法及代码实践(源自《Python编程快速上手  让繁琐工作自动化》)

    # (字典)更新字典物品清单.py
    
    '''
    假设征服一条龙的战利品表示为这样的字符串列表:
    dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
    写一个名为 addToInventory(inventory, addedItems)的函数, 其中 inventory 参数
    是一个字典, 表示玩家的物品清单(像前面项目一样), addedItems 参数是一个列表,
    就像 dragonLoot。
    addToInventory()函数应该返回一个字典, 表示更新过的物品清单。
    '''
    # 意思是先更新字典再调用打印字典的函数
    
    items = {'gold coin': 42, 'rope': 1}
    dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
    
    
    def displayInventory(dict_item):
        print('Inventory')
        for i,j in dict_item.items():
            print(i,j)
        print('Total number of items: {}'.format(sum(value for key,value in dict_item.items())))
    
    
    def addToInventory(inventory, addedItems):
        update_dict = {}
        temp = {}
        for i in set(addedItems):
            temp.setdefault(i, addedItems.count(i))
        for key in temp.keys() | inventory.keys(): # 字典视图支持并集运算
            update_dict[key] = sum(d.get(key,0) for d in (temp,inventory)) # 此用get比用键值访问字典项好,for表明了可迭代的对象,可用sum,但元组内的通道符|不能再用,因为'temp|inventory'pyhton 不支持
        return update_dict
    
    
    if __name__ == '__main__':     
        displayInventory(addToInventory(items, dragonLoot))
    作者:南宫恨

    正是江南好风景,落花时节又逢君

  • 相关阅读:
    Table.Combine追加…Combine(Power Query 之 M 语言)
    Table.NestedJoin合并…Join(Power Query 之 M 语言)
    Delphi Post登陆Delphi盒子论坛源码
    分享一个函数GetStr
    用友生产工艺路线导入工具1.1
    笔下文学小说下载【3.01】 发布
    U6 3.2盘点单管理1.01
    防止SQL SERVER的事件探查器跟踪软件
    双系统的安装(原创)
    2345导航自动登陆签到【1.01】
  • 原文地址:https://www.cnblogs.com/ydkh/p/14673599.html
Copyright © 2020-2023  润新知