zoukankan      html  css  js  c++  java
  • python-dict

    dict(字典)

    字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。

    列表的缺点:
            1,列表如果存储的数据比较多,那么他的查询速度相对慢。
            2,列表存储的数据关联性不强。
    
    python基础数据类型之一:字典。
        python中唯一的映射类的数据,花括号{}括起来,他是以键值对形式存储,每一对键值对以
        逗号隔开的。
        {'name': 'Yang', 'age': 18, 'sex': 'man'}
        ps:
            数据类型的划分:
                容器非容器划分:
                    容器型数据类型:list,tuple,dict,set。
                    非容器型数据类型:int str bool
    
                可变与不可变划分:
                    可变(不可哈希hash)的数据类型:list dict,set
                    不可变(可哈希hash的)的数据类型: int bool str tuple
                                        对数据本身变化:
                                        i = 100
                                        i = 90
                                        print(i)
        字典是以键值对形式存储的,
        键:不重复的,唯一的,键的数据类型必须是不可变的数据类型。
        值:任意数据类型,对象。
        字典可以存储大量的键值对数据,
        python3.5包括3.5之前:字典是无序的。
        python3.6之后,字典变成有序的。
        字典的优点:
            1,字典存储大量的关系型数据。
            2,字典的查询速度非常快。
    

    字典的基本操作

    创建

    字典的创建可以使用{},或者是dict()进行创建。

    dic_ = {}
    dic_1 = dict()
    dic_.setdefault("name", "Yang")
    dic_1.setdefault("Name", "Wang")
    print(dic_, dic_1)  # {'name': 'Yang'} {'Name': 'Wang'}
    

    dic_ = dict()  # 创建字典
    # 直接添加
    dic_["name"] = "Tom"
    print(dic_)  # {'name': 'Tom'}
    
    # setdefault添加
    # dic_.setdefault("age")  # 设置过后就不能修改,默认值为None
    # print(dic_)  # {'name': 'Tom', 'age': None}
    
    dic_.setdefault("age", 23)  # {'name': 'Tom', 'age': 23}
    print(dic_)
    dic_.setdefault('age', 12)  # age:23 answer:{'name': 'Tom', 'age': 23}
    print(dic_)  # age:None  {'name': 'Tom', 'age': None}
    
    

    dic_ = {'name': 'Tom', 'age': 23, "sex": "man"}
    # pop:根据key进行删除,有返回值
    
    ret = dic_.pop("name")
    print(dic_)  # {'age': 23, 'sex': 'man'}
    print(ret)  # Tom 是对应的value
    
    # popitem  删除最后一个,也有返回值
    
    ret = dic_.popitem()  # 删除最后一个(3.6以前是随机删除,原因的3.6以前字典无序)
    print(ret)  # ('sex', 'man')
    print(dic_)  # {'age': 23}
    
    # del 删除 按照索引
    del dic_["age"]  #
    print(dic_)  # {}
    # del dic_["age1"]  # 没有找到会报错  KeyError: 'age1'  
    
    dic_ = {'name': 'Tom', 'age': 23, "sex": "man"}
    
    # 清空字典  字典还存在
    
    dic_.clear()
    print(dic_)  # {}
    
    

    # 直接改
    
    dic_ = {'name': 'Tom', 'age': 23, "sex": "man"}
    dic_["name"] = "xiaoming"
    print(dic_)  # {'name': 'xiaoming', 'age': 23, 'sex': 'man'}
    
    dic_ = {'name': 'Tom', 'age': 23, "sex": "man"}
    # update 更新
    dic_1 = {"name": "Jack", "age": 12, "hobby": "sing"}
    # 将dic_的数据更新到dic_1数据中
    dic_1.update(dic_)
    print(dic_1)  # {'name': 'Tom', 'age': 23, 'hobby': 'sing', 'sex': 'man'}
    print(dic_)  # {'name': 'Tom', 'age': 23, 'sex': 'man'}
    
    

    dic_ = {'name': 'Tom', 'age': 23, "sex": "man"}
    
    # 按照键(key)进行查找
    
    ret = dic_["name"]
    print(ret)  # Tom
    
    # ret1 = dic["name1"]  # 未找到key则将报错
    # print(ret1)  # KeyError: 'name1'
    
    # get 方式进行查找,通过键进行查找
    
    ret3 = dic_.get("age")
    print(ret3)  # 23
    
    ret4 = dic_.get("name1")  # 未找到返回None,也可以进行设置返回值
    print(ret4)  # None
    
    ret5 = dic_.get("name1", "未找到!")
    print(ret5)  # 未找到!
    
    

    其他

    # 查看所有keys(键)
    ret = dic_.keys()
    print(ret, type(ret))  # dict_keys(['name', 'age', 'sex']) <class 'dict_keys'>
    
    # 查看可以将其装换为list类型
    print(list(ret))  # ['name', 'age', 'sex']
    
    # 查看所有的values(值)
    ret1 = dic_.values()
    print(list(ret1))  # ['Tom', 23, 'man']
    
    # 查看键值对
    ret2 = dic_.items()
    print(list(ret2))  # [('name', 'Tom'), ('age', 23), ('sex', 'man')]
    
    # 对元素进行读取
    for data in dic_:
        print(data, end=" ")   # 返回的是键:name age sex
    print('
    ')
    
    for key in dic_.keys():  # name age sex
        print(key, end=" ")
    print('
    ')
    
    for value in dic_.values():
        print(value, end=" ")  # Tom 23 man 返回字典的值
    print('
    ')
    
    for item in dic_.items():
        print(item, end=" ")  # ('name', 'Tom') ('age', 23) ('sex', 'man')
    print('
    ')
    
    # 对items中将key,value 进行提取
    for k, v in dic_.items():
        print("key:",k, "value:", v)
    
    '''
    key: name value: Tom
    key: age value: 23
    key: sex value: man
    '''
    
    # fromkeys
    
    dic = dict.fromkeys([1,2,3],'太白')
    print(dic)  # {1: '太白', 2: '太白', 3: '太白'}
    dic = dict.fromkeys('abcd','太白')
    print(dic)  # {'a': '太白', 'b': '太白', 'c': '太白', 'd': '太白'}
    dic = dict.fromkeys('abcd', [1, 2])
    print(dic)  # {'a': [1, 2], 'b': [1, 2], 'c': [1, 2], 'd': [1, 2]}
    # 坑: 如果你的值是一个可变的数据类型, 他在内存中是一个.id相同.
    dic = dict.fromkeys('abcd',[])
    print(dic)  # {'a': [], 'b': [], 'c': [], 'd': []}  
    dic['a'].append(666)  #
    print(dic)  # {'a': [666], 'b': [666], 'c': [666], 'd': [666]}
    dic['b'].append(111)
    print(dic)  # {'a': [666, 111], 'b': [666, 111], 'c': [666, 111], 'd': [666, 111]}
    dic['c'].append(222)
    print(dic) # {'a': [666, 111, 222], 'b': [666, 111, 222], 'c': [666, 111, 222], 'd': [666, 111, 222]}
    # 相当于a,b,c,d共用一个列表,当a,b,c,d中的一个添加对象,则也就添加到列表中
    
    

    字典的嵌套

    dic = {
        'name_list': ['博哥', '菊哥', 'b哥', 'alex'],
        'barry': {
            'name': '太白金星',
            'age': 18,
            'hobby': 'wife',
        }
    }
    
    # 1,给这个列表['博哥', '菊哥', 'b哥', 'alex'] 追加一个元素 '老男孩'。
    
    dic["name_list"].append("老男孩")  # {'name_list': ['博哥', '菊哥', 'b哥', 'alex', '老男孩'], 'barry': {'name': '太白金星', 'age': 18, 'hobby': 'wife'}}
    
    # 2,将这个列表['博哥', '菊哥', 'b哥', 'alex']中的alex变成首字母大写。
    dic["name_list"][-1] = dic["name_list"][-1].capitalize()  # {'name_list': ['博哥', '菊哥', 'b哥', 'Alex'], 'barry': {'name': '太白金星', 'age': 18, 'hobby': 'wife'}}
    
    # 3,将这个键值对 'name': '太白金星' 的 '太白金星' 改成男神。
    dic["barry"]["name"] = "男神" # {'name_list': ['博哥', '菊哥', 'b哥', 'alex'], 'barry': {'name': '男神', 'age': 18, 'hobby': 'wife'}}
    
    # 4,给barry对应的小字典增加一个键值对: weight: 160
    
    dic["barry"]["weight"] = 160  # {'name_list': ['博哥', '菊哥', 'b哥', 'alex'], 'barry': {'name': '太白金星', 'age': 18, 'hobby': 'wife', 'weight': 160}}
    
  • 相关阅读:
    原型模式
    创造者模式
    抽象工厂模式
    工厂方法模式
    简单工厂模式
    HiveQl 基本查询
    使用VMware安装linux虚拟机以及相关配置
    大数据测试
    使用Pycharm创建一个Django项目
    LoadRunner监控window系统各项指标详解
  • 原文地址:https://www.cnblogs.com/yangchangjie150330/p/10483056.html
Copyright © 2011-2022 走看看