zoukankan      html  css  js  c++  java
  • 4. 基本数据结构-字典

    一、字典定义

    ​ 字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中。键必须唯一,值则不必;值可以取任何数据类型,但键必须是不可变数据类型,如:字符串,整型,元组。字典查询效率高,内部使用key来计算一个内存地址(hash)

    二、字典操作

    1. 添加

    # 创建空字典
    dict_test = {}
    dict_test = dict()
    
    dict_test["language"] = "Chinese"
    >>> dict_test
    {'language': 'Chinese'}
    
    # setdefualt() - 默认:None
    dict_test.setdefault("age")
    >>>{'language': 'Chinese', 'age': None}
    
    dict_test.setdefault("name", "WeChat")
    >>>{'language': 'Chinese', 'age': None, 'name': 'WeChat'}
    

    2. 修改

    dict_test = {'language': 'Chinese', 'age': None, 'name': 'WeChat'}
    dict_test["age"] = 18
    >>>{'language': 'Chinese', 'age': 18, 'name': 'WeChat'}
    
    # update() - 相当于合并两个dict
    dict_one = {"name":"tree", "age":100, "height":"90M"}
    dict_two = {"name":"tree", "color":"green"}
    dict_one.update(dict_two)
    >>>dict_one
    {'name': 'tree', 'age': 100, 'height': '90M', 'color': 'green'}
    

    3. 查询

    dict_test = {'language': 'Chinese', 'age': 10, 'name': 'WeChat'}
    
    (1) 直接key取 - 当key不存在时,KeyError
    	dict_test["age1"]
    (2) get() 方法
    	dict_test.get("name") 
        dict_test.get("name_new") ->没有key,返回None
        dict_test.get("name_new", "不存在") ->没有key,指定返回值
    (3) setdefault()
    	-新增:先看看有没有key,有就返回其值;没有,执行新增
        dict_test.setdefault("name", "QQ")
        >>>name在dict_test中则返回对应的值,不在则返回QQ
    

    4. 删除

    dict_test = {'language': 'Chinese', 'age': 10, 'name': 'WeChat'}
    (1) dict_test.pop("age") ->pop指定key删,有返回值
    	>>>{'language': 'Chinese', 'name': 'WeChat'}
    (2) dict_test.popitem() ->随机删除
    (3) del dict_test["name"]
    (4) dict_test.clear() ->清空
    

    三、字典方法

    1. items()

    # 这个类型就是dict_items类型,可迭代的
    item = dic.items()
    print(item,type(item))  
    >>>dict_items([('name', 'jin'), ('sex', 'male'), ('age', 18)]) <class 'dict_items'>
    

    2. keys()

    keys = dic.keys()
    print(keys,type(keys))  
    >>>dict_keys(['sex', 'age', 'name']) <class 'dict_keys'>
    

    3. values()

    values = dic.values()
    print(values,type(values)) 
    >>>dict_values(['male', 18, 'jin']) <class 'dict_values'> 同上
    

    4. 迭代

    1. 默认循环字典键key
    for key in dic:
        print(key)   
    
    2. 循环字典键key
    for key in dic.keys():
        print(key)   
    
    3. 循环字典中的值
    for value in dic.values():
        print(value) 
        
    4. 循环字典中的键值对
    for key, value in dic.items( ):
            print(key, value)   
    
    len() 计算键值对的个数
    

    四、字典循环删除

    1.  删除数字小于100的人
    dic = {'alex':100, 'wusir':20000, 'jack':12, 'tony':1, 'ketty': 3000}
    # 先创建一个新列表存储要删的人
    li = [] 
    
    # 循环字典中的键值对
    for key, value in dic.items():
        # 小于100的人添加进列表
        if value < 100: 
        li.append(key)
    
    # 循环列表中的元素,删除字典中的键
    for el in li: 
        del dic[el]
    print(dic) 
    结果:
    {'alex': 100, 'wusir': 20000, 'ketty': 3000}
    

    五、fromkeys()

    1. 不是改变字典,是一个类方法,作用是创建新字典
        dic = {}
        dic_new = dic.fromkeys("abc", "hello")
        print(dic) # {}
        print(dic_new) # {'a': 'hello', 'b': 'hello', 'c': 'hello'}
    
    2. 新字典是通过第一个参数的迭代和第二个参数组成键值对创建新字典。fromkeys( )正常来说是类名来访问的
        dic1 = dic.fromkeys(['a', 'b'], [])
        dic1['a'].append('alex')
        # key使用的同一值
        >>>{'a':['alex'], 'b':['alex']}    
    
    1、 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
    2、 键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行
    3、不可变数据(不可hash)(3 个):Number(数字)、String(字符串)、Tuple(元组);
    4、可变数据(可hash)(3 个):List(列表)、Dictionary(字典)、Set(集合)。
    

    六、实例

    ​ 有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表}

    1. 方法一

    li= [11,22,33,44,55,66,77,88,99,90]
    result = {}
    for el in li:
    
        if el < 66:
            # setdefault可以帮我们执行新增, 如果key存在了就不新增了
            # {'key1':[11,22]}
            result.setdefault("key1", []).append(el)
        else:
            result.setdefault("key2", []).append(el)
    

    2. 方法二

    li= [11,22,33,44,55,66,77,88,99,90]
    result = {}
    for el in li:
    	if el < 66: # 11, 22
            if result.get("key1") == None:
                result["key1"] = [el] # 11
            else:
                result['key1'].append(el)
        else:
            if result.get("key2") == None:
                result["key2"] = [el] # 11
            else:
                result['key2'].append(el)
    
  • 相关阅读:
    强制开启Android webview debug模式
    JavaScript DOM操作案例自定义属性的设置跟获取
    JavaScript innerText跟innerHTML的区别
    JavaScript DOM操作案例封装innerText跟textContent函数(浏览器兼容)
    JavaScript其他获取元素的方式
    JavaScript DOM操作案例根据类样式的名字获取元素
    JavaScript DOM操作案例根据name属性获取元素
    Java throws 使用
    理解 Android Build 系统
    理解Android编译命令
  • 原文地址:https://www.cnblogs.com/hq82/p/11332160.html
Copyright © 2011-2022 走看看