zoukankan      html  css  js  c++  java
  • python全栈_011_Python3基本数据类型--字典

    1:什么是字典?:

      dict,以{} 来表示,使用逗号来隔开,内部元素使用key:value的形式来保存数据,key必须是不可变的数据类型,value可以是任何类型的数据类型。
      已知不可变的数据类型:int,str,bool,tuple
      可变的数据类型: list,dict,set
      语法:
        {key1:value1,key2:value2,key3:value1.......}
        (注意:key必须是不可变数据类型)

    # 合法
    dic = {1234: 789, 'jj': '林俊杰', True: 300, 'jay': '周杰伦', (1,2,3): 'hello'}  # 这样是可以的
    print(dic[1234])
    print(dic['jj'])
    print(dic[True])
    print(dic[(1,2,3)])
    
    # 不合法的
    # dic = {1234: 456,[1,2]: 'list'}  # list 是可变的,不能作为key;TypeError: unhashable type: 'list'
    #dic = {1234: 456,{1:2}: 'dict'}   # dict 是可变的,不能作为key;TypeError: unhashable type: 'dict'
    dic = {1234: 456,{1,2}: 'set'}     # set 是可变的,不能作为key;TypeError: unhashable type: 'set'

    2:字典的增删改查:

    2.1:增加

    dic = {}  # 或者 dic = dict()
    # 1: 直接用key 往里面存数据即可,
    #    如果不存在key值就添加,如果存在就更新key对应的值;
    dic['刘德华'] = '马桶'  #  直接用key 往里面存数据即可
    dic['王宝强'] = '天下无贼'
    print(dic)   #  输出  {'刘德华': '马桶', '王宝强': '天下无贼'}
    dic['王宝强'] = '士兵突击'  # 如果key值存在,那么会替换掉原来的value
    print(dic)    # 输出  {'刘德华': '马桶', '王宝强': '士兵突击'}
    
    # 2:setdefault(),如果不存在就添加,返回value值;如存在就不做增加处理,返回原来的value值
    value = dic.setdefault('黄秋生', '头文字D')
    print(value)  # 头文字D
    print(dic)    # {'刘德华': '马桶', '王宝强': '士兵突击', '黄秋生': '头文字D'}
    value = dic.setdefault('黄秋生', '无间道')  # 如果存在了key,不会执行增加操作,
    print(value)  # 头文字D
    print(dic)    # {'刘德华': '马桶', '王宝强': '士兵突击', '黄秋生': '头文字D'}

    2.2:删除

    # 1: pop,指定 key值删除
    # dic.pop("a",'无key默认返回值') # pop根据key删除键值对,并返回对应的值,如果没有key则返回默认返回值
    dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "王宝强": "天下无贼" }
    value = dic.pop('王宝强')  # key存在,并返回key对应的value
    print(value)  # 天下无贼
    print(dic)   # {'黄日华': '天龙八部', '苏有朋': '倚天屠龙记'}
    
    dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "王宝强": "天下无贼" }
    # dic.pop('刘德华')  # key值不存在,这样删除会报错, KeyError: '刘德华'
    # 删除时指定默认的返回值
    value = dic.pop('刘德华',None) #  这样删除不会报错
    print(value)  # None
    print(dic)    # {'黄日华': '天龙八部', '苏有朋': '倚天屠龙记', '王宝强': '天下无贼'}
    
    # 2: popitem()  随机删除
    dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "王宝强": "天下无贼" }
    dic.popitem()      # 随机删除
    print(dic)
    
    #  3: del,key值需要存在,不然会报错
    dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "王宝强": "天下无贼" }
    del dic['苏有朋']    # 删除存在的key值,
    print(dic)
    #del dic['苏有朋']    #  删除不存在的key,报错, KeyError: '苏有朋'
    #print(dic)
    
    # 4:clear() 清空字典
    dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "王宝强": "天下无贼" }
    dic.clear()   # 清空字典
    print(dic)

    2.3:修改

    # 更新(修改):
    dic = {"黄日华": "天龙八部", "苏有朋": "倚天屠龙记", "刘德华": "马桶", "王宝强": "天下无贼" }
    dic['刘德华'] = '无间道' # key不存在就添加,key存在就更新
    dic2 = {'刘能': '大阳哥', '王宝强': '士兵突击'}
    dic.update(dic2)  # 将dic2所有的键值对覆盖添加(相同的覆盖,没有的添加)到dic中
    print(dic)
    print(dic2)

    2.4:查询(访问)

    # 查询
    dic = {'黄日华': '天龙八部', '苏有朋': '倚天屠龙记', '刘德华': '无间道', '王宝强': '士兵突击', '刘能': '大阳哥'}
    #1:最直观。直接用key
    print(dic['苏有朋'])   # 没有key值会报错
    #print(dic['苏有朋3'])  # KeyError: '苏有朋3'
    
    #2:get方法,不存在返回None
    print(dic.get('黄日华'))
    print(dic.get('黄日华2'))  # 不存在返回 None
    print(dic.get('黄日华3', 'haha不存在'))  # 第二个参数,不存在的时候,默认的返回值

    2.5:判断某个key是否存在

    dic = {'黄日华': '天龙八部', '苏有朋': '倚天屠龙记', '刘德华': '无间道', '王宝强': '士兵突击', '刘能': '大阳哥'}
    
    # 1:使用get方法
    if dic.get('黄日华1') == None:
        print('黄日华1 不存在')
    else:
        print('黄日华1 存在')
    
    # 2:
    if '黄日华2' in dic:
        print('黄日华2 存在')
    else:
        print('黄日华2 不存在')
    
    if  '黄日华3' in dic.keys():
        print('黄日华3 存在')
    else:
        print('黄日华3 不存在')

    3:字典的相关(遍历):

    dic = {'黄日华': '天龙八部', '苏有朋': '倚天屠龙记'}
    
    # 对字典的遍历
    print('-1-keys:' + '-'*30)
    print(dic.keys())  # dict_keys(['黄日华', '苏有朋'])  像列表,但不是列表
    # 遍历key,并通过key访问value
    for key in dic.keys():
        print(key, dic[key])
    
    print('-2-values:' + '-'*30)
    print(dic.values())
    # 遍历value
    for value in dic.values():
        print(value)
    
    print('-3-items:' + '-'*30)
    # 也可以遍历字典
    print(dic.items())  # 拿到的是 (key,value)元组
    for item in dic.items():
        print(item,type(item))   # item 为元组
        print(item[0], item[1])  # 通过下标访问元组 item[0] 为key值,item[1]为value值
    
    
    # 解构,解包
    a, b = (10, 20)  # 解构,解包,要求前面变量的个数,与后面解包的个数一致
    print(a,b)
    a, b = [30, 40]  # 解构,解包 ,这样也是可以的
    print(a,b)
    
    for item in dic.items():
        k, v = item # item 是元组,进行解包
        print(k, v)
    
    # 可以直接使用下面的方式:
    for key, value in dic.items():  # 当需要遍历字典,在操作中涉及到key和value的时候
        print(key, value)
    
    
    #  字典本身是一个可迭代对象,可以直接进行for循环
    dic = {'黄日华': '天龙八部', '苏有朋': '倚天屠龙记'}
    # 只需要遍历key的时候,使用这种方式
    for key in dic:  # 拿到的是Key,  dic.keys()的结果一样
        print(key)

    4:字典的嵌套:

    wf = {
        'name': '汪峰',
        'age': 44,
        '成名曲': '春天里',
        'wife': {
            'name': '章子怡',
            'age': 39,
            '工作': '演员'
        },
        'children': [
            {'num': '001', 'name': '汪1', 'hobby': '唱歌'},
            {'num': '002', 'name': '汪2', 'hobby': '演戏'}
        ]
    
    }
    
    print(wf)
    # wf 第二个孩子的爱好 ?
    print(wf['children'][1]['hobby'])  #  输出 演戏
    # wf 妻子的工作 ?
    print(wf['wife']['工作'])  # 输出 演员
    # wf 的老婆 老了10岁 ?
    wf['wife']['age'] = wf['wife']['age'] + 10
    print(wf)

    5:字典内置函数&方法:

      Python字典包含了以下内置函数:

    序号函数及描述
    1 cmp(dict1, dict2)
    比较两个字典元素。
    2 len(dict)
    计算字典元素个数,即键的总数。
    3 str(dict)
    输出字典可打印的字符串表示。
    4 type(variable)
    返回输入的变量类型,如果变量是字典就返回字典类型。

      Python字典包含了以下内置方法:

    序号函数及描述
    1 dict.clear()
    删除字典内所有元素
    2 dict.copy()
    返回一个字典的浅复制
    3 dict.fromkeys(seq[, val])
    创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
    4 dict.get(key, default=None)
    返回指定键的值,如果值不在字典中返回default值
    5 dict.has_key(key)
    如果键在字典dict里返回true,否则返回false
    6 dict.items()
    以列表返回可遍历的(键, 值) 元组数组
    7 dict.keys()
    以列表返回一个字典所有的键
    8 dict.setdefault(key, default=None)
    和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
    9 dict.update(dict2)
    把字典dict2的键/值对更新到dict里
    10 dict.values()
    以列表返回字典中的所有值
    11 pop(key[,default])
    删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
    12 popitem()
    随机返回并删除字典中的一对键和值。

    6:for循环:

      for循环:用户按照顺序循环可迭代对象的内容。

    s = 'HelloWorld'
    print(s)
    for i in s:
        print(i,end=',')
    
    print('')
    lst = [1,3,4,'hi']
    for el in lst:
        print(el,end= ',')
    
    print('')
    tu = (1,4,'中国',False)
    for el in tu:
        print(el,end=',')
    
    print('')
    dic = {'黄日华': '天龙八部', '苏有朋': '倚天屠龙记'}
    for k,v in dic.items():
        print(k,v)

    6:enumerate:枚举:

      enumerate:枚举,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
    # enumerate:枚举,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),
    # enumerate将其组成一个索引序列,利用它可以同时获得索引和值
    # enumerate(sequence, [start=0])
    
    s = 'HelloWorld'
    print(s)
    for index,value in enumerate(s):
        print(index,value)
    
    print('')
    lst = [1,3,4,'hi']
    for index,el in enumerate(lst):
        print(index,el)
    
    print('')
    tu = (1,4,'中国',False)
    for index,el in enumerate(tu):
        print(index,el)






  • 相关阅读:
    JavaScript之图片操作7
    JavaScript之图片操作6
    【数据结构】树
    【数据结构】查找
    【数据结构】排序
    【HTML】常用标签及属性
    【数据结构】堆栈
    【计算机网络】五层体系结构
    【Linux】相关英文缩写含义
    【Java】连接数据库MySQL
  • 原文地址:https://www.cnblogs.com/ixuby/p/10118641.html
Copyright © 2011-2022 走看看