zoukankan      html  css  js  c++  java
  • dict常用操作

    dict是python中的常用数据结构,应该尽量掌握其使用方法

    """
        初始化一个dict的四种方式:
        1. dict() -> 创建一个空的dict
        2. dict(mapping) -> new dictionary initialized from a mapping object's
           (key, value) pairs
        3. dict(iterable) -> new dictionary initialized as if via:
           d = {}
           for k, v in iterable:
               d[k] = v
        4.  dict(**kwargs) -> new dictionary initialized with the name=value pairs
           in the keyword argument list.  For example:  dict(one=1, two=2)
       """
    
    # 第一种方式
    d = dict()
    
    # 第二种方式
    # d = {"person": {"name": "admin", "age": 12},
    #      "animal": {"name": "gaodan", "age": 3},
    #      }
    
    # 第三种方式
    d = dict({"name": "admin"})
    print(d)
    
    # 第四种方式
    d = dict(name='admin', age=12)
    
    print(type(d))
    print("原字典:%s" % d)  # {'name': 'admin', 'age': 12}
    
    # clear, 清空
    # d.clear()
    # print(d)
    
    
    # copy 浅拷贝
    
    
    new_d = d.copy()
    print("copy出的新字典:%s" % new_d)  # {'name': 'admin', 'age': 12}
    
    new_d['name'] = 'root'
    print('修改之后的copy字典:%s' % new_d)  # 修改之后的copy字典:{'name': 'root', 'age': 12}
    print("修改之后的原字典:%s" % d)  # {'name': 'admin', 'age': 12}
    # 总结: copy浅拷贝简单数据结构时,创建了一个新的对象,修改新dict中的值,不会引起原有dict中值的变化
    
    print('*' * 50)
    
    d = {"person": {"name": "admin", "age": 12},
         "animal": {"name": "gaodan", "age": 3}
         }
    
    print(d)  # {'person': {'name': 'admin', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}
    new_d = d.copy()
    new_d['person']['name'] = 'root'
    
    print(new_d)  # {'person': {'name': 'root', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}
    print(d)  # {'person': {'name': 'root', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}
    
    # 总结: 浅拷贝: copy浅拷贝复杂数据结构时,只是指向了这个复杂数据结构的引用,并没有创建一个新的对象.所以修改new_d这个新dict的值时,原dict中的值也发生变化.如果是简单数据结构,不存在这类情况,上面也有示例
    
    """
         python中的深拷贝  需要 import copy
         copy.deepcopy()
    """
    
    print('--------------------deep copy------------------')
    import copy
    
    d = {"person": {"name": "admin", "age": 12},
         "animal": {"name": "gaodan", "age": 3}
         }
    print(d)
    dd = copy.deepcopy(d)
    print(dd)  # {'person': {'name': 'admin', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}
    dd['person']['name'] = '哑巴'
    print(dd)  # {'person': {'name': '哑巴', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}
    print(d)  # {'person': {'name': 'admin', 'age': 12}, 'animal': {'name': 'gaodan', 'age': 3}}
    
    
    # fromkeys, 创建一个新的dict ,key是序列中的值
    d = dict.fromkeys(['jet','lily'],{"name":"mam"})
    print(d) # {'jet': {'name': 'mam'}, 'lily': {'name': 'mam'}}
    
    # get .取值 ,没有就是None
    value = d.get("jet")
    print(value) #{'name': 'mam'}
    
    d = {"name":'admin','age':12}
    
    #items 方法
    kv = d.items()
    for k,v in kv:
         print(k,v)
    
    keys = d.keys()
    print(keys)  # dict_keys(['name', 'age'])
    
    
    # pop(key)  移除指定的key 对应的kv
    # value = d.pop('name')  # 删除name 键值对
    # print(value)    # admin
    # print(d)  # {'age': 12}
    
    
    # popitem 移除后面的一组item
    popitem = d.popitem()
    print(popitem)  # ('age', 12)  移除了这一对映射关系
    print(d)  # {'name': 'admin'}   d 还剩下这玩艺
    
    
    
    d = {"name":'admin','age':12}
    
    # setdefault(k,v) , 如果原dict有中k, 就返回原dict中k-->v , 否则就将k,v添加到dict中
    default_value = d.setdefault('female', 'ali')
    print(default_value)
    print(d)  # {'name': 'admin', 'age': 12, 'female': 'ali'}
    
    default_value = d.setdefault('female', 'jd')
    print(default_value)  # ali
    print(d)  # {'name': 'admin', 'age': 12, 'female': 'ali'}
    
    # update. 往dict中添加元素
    # 使用update的第一种方式 ,注意key没有加引号
    # d.update(book='python',teacher='dog')
    print(d)  # {'name': 'admin', 'age': 12, 'female': 'ali', 'book': 'python', 'teacher': 'dog'}
    
    #使用update的第二种方式
    d.update([('teacher','dog'),{'book','java'}])  #好吊的样子
    print(d) #{'name': 'admin', 'age': 12, 'female': 'ali', 'teacher': 'dog', 'book': 'java'}
    
    
    # values
    
    vs = d.values()
    print(vs)  #dict_values(['admin', 12, 'ali', 'dog', 'java'])


  • 相关阅读:
    gcc5.2版本安装详解
    Java的各种加密算法
    Response.ContentType 详细列表
    使用C#选择文件夹、打开文件夹、选择文件
    C#从SQL server数据库中读取l图片和存入图片
    GridView导出成Excel字符"0"丢失/数字丢失的处理方式 收藏
    只能在执行Render() 的过程中调用 RegisterForEventValidation;
    维护删除订单后,清空安装和售后信息;条码打印软件补充打印问题
    Bind("入库日期", "{0:yyyy-MM-dd}") 关于asp.net格式化数据库日期字符串
    特别注意: range.Text.ToString(); 和 range.Value2.ToString(); 的区别
  • 原文地址:https://www.cnblogs.com/z-qinfeng/p/12037474.html
Copyright © 2011-2022 走看看