zoukankan      html  css  js  c++  java
  • python3 字典dict

    '''
    字典(dict)是python中唯一的一个映射类型。
    它是以{}括起来的键值对组成,在dict中key是唯一的,在保存的时候,根据key来计算出一个内存地址。然后将key-value保存在这个
    地址中。这种算法被称为hash算法。在dict中存储的key-value中的key必须是可hash的,可哈希意味着不可变。
    
    已知的可哈希(不可变)的数据类型:int, str, bool, tuple
    不可哈希(可变)的数据类型:list, dict, set
    
    语法:
        {key1:value1, key2:value2...}
    
    注意:key必须是不可变(可哈希)的,value没有要求,可以保存任意类型的数据。
    合法字典
    '''
    dic = {123: 456, True: 999, "id": 1, ("a", "b", "c"): "aaa"}
    print(dic[123])  # 456
    print(dic[True])  # 999
    print(dic["id"])  # 1
    print(dic[("a", "b", "c")])  # aaa
    
    '''
    不合法
    '''
    # dic = {[1, 2, 3]: "abc"}  # list是可变的,不能作为key  TypeError: unhashable type: 'list'
    # dic = {{1: 2}: "apple"}  # dict是可变的,不能作为key  TypeError: unhashable type: 'dict'
    # dic = {{1, 2, 3}: "orange"}  # set是可变的,不能作为key  TypeError: unhashable type: 'set'
    
    '''
    dict保存的数据不是按照我们添加进去的顺序保存的,是按照hash表的顺序保存的,而hash表不是连续的,所以不能进行切片。
    它只能通过key获取dict中的数据。
    '''
    
    '''
    1、字典添加元素
    '''
    dic = {}
    dic['name'] = "lily"  # 如果dict中没有出现这个key,就会新增一个key-value的组合进dict
    dic['age'] = 18
    print(dic)  # {'name': 'lily', 'age': 18}
    
    '''
    如果dict中没有出现过这个key-value,可以通过setdefault设置默认值。
    如果dict中已经存在了,那么setdefault将不会起作用。
    '''
    dic.setdefault("salary")  # 也可以往里面设置值
    print(dic)  # {'name': 'lily', 'age': 18, 'salary': None}
    dic["salary"] = 10000
    print(dic)  # {'name': 'lily', 'age': 18, 'salary': 10000}
    dic.setdefault("salary", 12000)
    print(dic)  # {'name': 'lily', 'age': 18, 'salary': 10000}
    
    '''
    2、字典删除元素
    pop(key)
    del dic[key]
    '''
    dic = {"a": "apple", "b": "banana", "o": "orange"}
    print(dic)  # {'a': 'apple', 'b': 'banana', 'o': 'orange'}
    ret = dic.pop("b")
    print(ret)  # banana
    print(dic)  # {'a': 'apple', 'o': 'orange'}
    
    del dic["o"]
    print(dic)  # {'a': 'apple'}
    
    '''
    随机删除
    '''
    dic = {"a": "apple", "b": "banana", "o": "orange"}
    ret = dic.popitem()
    print(ret)  # ('o', 'orange')
    print(dic)  # {'a': 'apple', 'b': 'banana'}
    
    '''
    清空字典中的所有内容
    '''
    dic = {"a": "apple", "b": "banana", "o": "orange"}
    dic.clear()
    print(dic)  # {}
    
    '''
    3、修改字典中的元素
    '''
    dic = {"a": "apple", "b": "banana", "o": "orange"}
    dic2 = {"s": "strawberry", "w": "watermelon", "b": "banana"}
    dic.update(dic2)
    print(dic)  # {'a': 'apple', 'b': 'banana', 'o': 'orange', 's': 'strawberry', 'w': 'watermelon'}
    print(dic2)  # {'s': 'strawberry', 'w': 'watermelon', 'b': 'banana'}
    dic2["s"] = "草莓"
    print(dic2)  # {'s': '草莓', 'w': 'watermelon', 'b': 'banana'}
    
    '''
    4、查询
    dic[key] 没有会报错
    dic.get(key) 没有不会报错
    '''
    dic = {"a": "apple", "b": "banana", "o": "orange"}
    print(dic["a"])  # apple
    print(dic.get("b"))  # banana
    print(dic.get("c"))  # None
    print(dic.get("w", "watermelon"))  # watermelon
    
    '''
    5、keys()
    values()
    items()
    '''
    dic = {"a": "apple", "b": "banana", "o": "orange"}
    print(dic.keys())  # dict_keys(['a', 'b', 'o'])
    for k in dic.keys():
        print(k)
    '''
    打印结果:
    a
    b
    o
    '''
    
    dic = {"a": "apple", "b": "banana", "o": "orange"}
    for k in dic:
        print(k)
    '''
    打印结果:
    a
    b
    o
    '''
    
    dic = {"a": "apple", "b": "banana", "o": "orange"}
    print(dic.values())  # dict_values(['apple', 'banana', 'orange'])
    for v in dic.values():
        print(v)
    '''
    打印结果:
    apple
    banana
    orange
    '''
    
    dic = {"a": "apple", "b": "banana", "o": "orange"}
    print(dic.items())  # dict_items([('a', 'apple'), ('b', 'banana'), ('o', 'orange')])
    for k, v in dic.items():
        print(k, v)
    '''
    打印结果:
    a apple
    b banana
    o orange
    '''
    
    '''
    items()比较常用,keys()和values()相对比较用的少。
    '''
    
    '''
    解构:解构的时候注意数量必须匹配
    '''
    a, b = 1, 2
    print(a, b)  # 1 2
    
    (c, d) = 3, 4
    print(c, d)  # 3 4
    
    # e, f = [1, 2, 3]  # 报错:ValueError: too many values to unpack (expected 2)
    # print(e, f)
  • 相关阅读:
    .NET分布式架构开发实战之一 故事起源
    .NET 分布式架构开发实战之三 数据访问深入一点的思考
    .NET 分布式架构开发实战之二 草稿设计
    .NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇)
    跨域SSO的实现之一:架构设计
    .NET下实现分布式缓存系统Memcached
    第一章 .NET的原理(2.0)
    Memcache协议中文版
    Excel数据导入Axapta中
    SQL Server2000的安装
  • 原文地址:https://www.cnblogs.com/lilyxiaoyy/p/11857873.html
Copyright © 2011-2022 走看看