[TOC] >[success] # dict -- 字典 ~~~ 1.字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据 计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型, 如:数字、字符串、元组。 2.字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。 3.字典是用{key:value}大括号里面分别是key和value对应,字典的表现形式在实际的生产生活中比较常见例如网页传输中的json,就是一种字典的传输方式 4.3.5以下含3.5字典是无序的,3.6以上字典是有序的但仍然可以使用orderdict 来保证有序字典 ~~~ >[danger] ##### fromkeys 快速将迭代对象变成k,创建字典 ~~~ # 这种情况三个key的列表指向都是一致的,所以进行更改的时候会统一更改44 dic = dict.fromkeys([1,2,3],[]) print(dic) # {1: [], 2: [], 3: []} ~~~ ~~~ iterable1 = "12" # 字符串 iterable2 = [1,2] # 列表 iterable3 = (1,2) # 元祖 iterable4 = {1:'one',2:'two'} # 字典 v1 = dict.fromkeys(iterable1,'字符串') v2 = dict.fromkeys(iterable2,'列表') v3 = dict.fromkeys(iterable3,'元祖') v4 = dict.fromkeys(iterable4,'字典') v5 = dict.fromkeys(iterable4) #value默认为None print(v1) print(v2) print(v3) print(v4) print(v5) 打印结果: {'1': '字符串', '2': '字符串'} {1: '列表', 2: '列表'} {1: '元祖', 2: '元祖'} {1: '字典', 2: '字典'} {1: None, 2: None} ~~~ >[danger] ##### setdefault 字典的增加 ~~~ # 有键值对,不做任何改变,没有才添加。 python = { "A" : 'JAVA', "B" : "C", "C" : "PYTHON", } python.setdefault('D') python.setdefault('E','#c') python.setdefault('A') print(python) 打印结果: {'A': 'JAVA', 'B': 'C', 'C': 'PYTHON', 'D': None, 'E': '#c'} ~~~ >[danger] ##### 字典的增加 ~~~ # key 存在则替换对应value,不存在则添加一个键值对放入字典中 python = { "A" : 'JAVA', "B" : "C", "C" : "PYTHON", } python['A'] = 'java被我替换了' python['D'] = "无则添加" print(python) 打印结果: {'A': 'java被我替换了', 'B': 'C', 'C': 'PYTHON', 'D': '无则添加'} ~~~ >[danger] ##### pop -- 删除指定字典中的k ~~~ python = { "A": 'JAVA', "B": "C", "C": "PYTHON", } dic_key = python.pop("A") print("返回值",dic_key) print(python) 打印结果: 返回值 JAVA {'B': 'C', 'C': 'PYTHON'} ~~~ * 删除不存的key ~~~ python = { "A": 'JAVA', "B": "C", "C": "PYTHON", } # 第二个参数是删除的k 不存在时返回值,不写删除不存在会报错 dic_key = python.pop("D",None) print("返回值",dic_key) print(python) 打印结果: 返回值 None {'A': 'JAVA', 'B': 'C', 'C': 'PYTHON'} ~~~ >[danger] ##### del -- 删除对象 ~~~ python = { "A": 'JAVA', "B": "C", "C": "PYTHON", } # 整个定义变量全都删除 del python ~~~ >[danger] ##### clear--清空字典 ~~~ python = { "A": 'JAVA', "B": "C", "C": "PYTHON", } python.clear() print(python) 打印结果: {} ~~~ >[danger] ##### update -- 将两个字典合并 ~~~ 1.update()可以将两个字典合并,如果待添加的字典和带扩充的字典有相同的key,新的会将原来的取代 ~~~ ~~~ python = { "A" : 'JAVA', "B" : "C", "C" : "PYTHON", } java ={ "A": 'PHP', "D": "GO", } python.update(java) print(python) 打印结果: {'A': 'PHP', 'B': 'C', 'C': 'PYTHON', 'D': 'GO'} ~~~ >[danger] ##### in -- 判读字典中的key,是否存在字典中 ~~~ python = { "A" : 'JAVA', "B" : "C", "C" : "PYTHON", } print("A" in python) print( "JAVA" in python) 打印结果: True False ~~~ >[danger] ##### get -- 查询字典中的值 ~~~ # 不存在的时候可以默认返回None 也可以指定返回内容 python = { "A" : 'JAVA', "B" : "C", "C" : "PYTHON", } print(python.get('A')) print(python.get("D")) print(python.get("D",None)) 打印结果: JAVA None None ~~~ >[danger] ##### 打印字典键值对 ~~~ python = { "A" : 'JAVA', "B" : "C", "C" : "PYTHON", } print(python.keys()) print(python.values()) print(python.items()) 打印结果: dict_keys(['A', 'B', 'C']) dict_values(['JAVA', 'C', 'PYTHON']) dict_items([('A', 'JAVA'), ('B', 'C'), ('C', 'PYTHON')]) ~~~ >[danger] ##### 循环配合字典 ~~~ python = { "A" : 'JAVA', "B" : "C", "C" : "PYTHON", } # 默认循环的是key for i in python: print(i) for i in python.values(): print(i) for i in python.keys(): print(i) for k,v in python.items(): print(k,v) ~~~ >[danger] ##### 元祖列表转字典 ~~~ # 列表和元组转换字典时,其中字符串的表达长度为2,否则就会报错例: A = ["大家","你好"] dic = dict(A) print(dic) 打印结果 {'大': '家', '你': '好'} ~~~ ~~~ # 当字符串长度大于2等于1时 会报错,因为字符是一个可迭代对象,将内容循环迭代 A = ["大家好","你好好啊好"] dic = dict(A) print(dic) 报错信息 Traceback (most recent call last): File "D:/pyGroup/ttt.py", line 2, in <module> dic = dict(A) ValueError: dictionary update sequence element #0 has length 3; 2 is required ~~~ ~~~ # 当元组和列表中互相嵌套,转换字典例: A = [["大家","你好"],("我的名字","一个测试")] dic = dict(A) print(dic) 打印结果: {'我的名字': '一个测试', '大家': '你好'} ~~~