字典
字典dict,存储的元素是一种无序的键值对(K-V),字典的K值为任意不可变数据类型(如:字符串、
数字、元组),V值为任意数据类型。在计算机内部保存数据的时候是用哈希表表示的,列表不支持转化为
哈希表的原因是K是变化的(列表的可以增、删、改),而元组却可以用哈希表表示。由于它的无序性,使
得它不能像列表那样使用切片。但是我们能对字典的中的K—Y值进行更改。使用for循环时(不能使用while),
默认之只输出K值,不输出V值。当然,在字典中也提供了相应的内置函数弥补这个缺陷。
还有一点需要注意,当字典中有两个相同的K值时,前一个V值会被后一个V值覆盖。这里介绍一个典型
的例子。比如当K值为bool类型的时,计算机认为True为1,False为0,若它前面的K值有0或者1,则将会被
覆盖掉。在输出时True被替换为1,False被替换为0,这是在实验时才发现有这个特点。
By the way,bool类型的非零值在计算机内部都会被表示为1。使得bool类型为False的值有0, 空(
None ),空字符串( " " ), 空元组( ( ) ),空列表( [ ] ),空字典( { } ),空集合( set( ) )。
1. 创建字典
#创建字典 info = { "k1":1, "k2":2, "k3":3, 4:444, 5:True, 6:6, "k7":["a","b","c","d"], "k8":("e","f","g","h",), } #测试 print(info[‘k1‘]) #取值 print(info[4]) print(info["k7"][2]) del info["k7"][2] #删除K print(info["k7"]) #显示删除后的内容
2. K值相同时
info = { 1:1, True:123, #覆盖前一个的V值 False:456, "k7":["a","b","c","d"], "k7":("e","f","g","h",), #覆盖前一个的V值 } print(info) #输出:{1: 123, ‘k7‘: (‘e‘, ‘f‘, ‘g‘, ‘h‘)}
3. 内置函数
3.1 fromkeys(*args, **kwargs)函数:是静态方法
#根据序列创建字典,由**kwargs指定统一的值 v = dict.fromkeys(["k1","k2","k3"],"see") print(v) #输出:{‘k1‘: ‘see‘, ‘k2‘: ‘see‘, ‘k3‘: ‘see‘}
3.2 setdefault()函数: 设置默认值,若设置的值已存在,则返回已存在的value
dic_ky = {"k1":"001","k2":"002"} v1 = dic_ky.setdefault(‘k3‘,‘003‘) #k3不存在,插入字典后返回一个值 v2 = dic_ky.setdefault(‘k1‘,‘111‘) #设置失败,返回看字典K1的原值001 print(v1) #输出:003 print(v2) #输出:001
3.3 update()函数: 更新字典
#第一种方法 dic_ky = {"k1":"001","k2":"002"} dic_ky.update({‘k1‘:‘111‘,‘k2‘:222}) print(dic_ky) #输出:{‘k1‘: ‘111‘, ‘k2‘: 222} #第二种方法 dic_ky.update(k1=‘a‘,k2=‘b‘,k3=‘c‘,k4=‘d‘) print(dic_ky) #输出:{‘k1‘: ‘a‘, ‘k2‘: ‘b‘, ‘k3‘: ‘c‘, ‘k4‘: ‘d‘}
3.4 keys函数: 取K值
for i in info.keys(): print(i)
3.5 values()函数: 取V值
for i in info.values(): print(i)
3.6 items()函数: 取K-V值,循环时需要使用两个迭代变量k,v
for k,v in info.items(): print(k,v)
3.7 get(d=None)函数: 安全的取值函数,当取的K不存在时不会报错
v = info.get(‘k‘,"ERROR") #ERROR是不存在时返回的值,若该参数忽略,则返回None print(v) #输出:ERROR
3.8 pop()函数: 将指定K值的V删除,返回值可以接收被删除的V值
v = info.pop(‘k‘,"ERROR") #ERROR是不存在时返回的值,若该参数忽略,则返回None print(v) #输出:ERROR
3.9 popitem()函数: 返回被随机删除的键值对
k,v = info.popitem() #返回被随机删除的键值对 print(k,v) #输出:k8 (‘e‘, ‘f‘, ‘g‘, ‘h‘)
3.10 clear()函数 和 copy()函数不再列出。。。
原文地址:https://www.cnblogs.com/Lynnblog/p/8910245.html