python基础类型—字典

时间:2021-09-04 13:51:16

字典

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

字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

 

可变数据类型:列表list,字典dict     又叫不可哈希

不可变数据类型: 元祖,bool值,数字int,字符型str            本身不可变,又叫可哈希

key  键,必须是不可变类型,可哈希

value 值,任意数据类型

创建空字典使用 { }

字典dict优点:

      1,用二分法查询,查询速度快

      2,储存大量的关系型数据

 

字典dick特点:

      字典dict是无序的。(3.5及之前的字典dict是无序的)

简写为dic

dic = {
    'name':'xiaoming',
    'age':18,
    'num':[1,2,3,'alex'],
    's1':{'xiao':'han','gh':[1,2,3,4]},
    'qq':123
}
print(dic)

结果 {'name': 'xiaoming', 'age': 18, 'num': [1, 2, 3, 'alex'], 's1': {'xiao': 'han', 'gh': [1, 2, 3, 4]}, 'qq': 123}

,两种方法(注意与列表list区别)

直接加,如果没有对应键值,则直接加在后面。如果有对应键值,则进行覆盖。
dic1 ={'name':'xiaojun'}
dic1['height'] = 180
print(dic1)

 

dic.setdefault('')  形式,有对应键值,则不做任何修改。没有对应键值,后面默认加None
dic = { 'name':'xiaoming', 'age':18, 'num':[1,2,3,'alex'], 's1':{'xiao':'han','gh':[1,2,3,4]}, 'qq':123 } dic.setdefault('weighe') print(dic)


dic.setdefault('weighe',180)  另一种形式
dic = { 'name':'xiaoming', 'age':18, 'num':[1,2,3,'alex'], 's1':{'xiao':'han','gh':[1,2,3,4]}, 'qq':123 } dic.setdefault('weighe',180) print(dic)
结果 {'name': 'xiaoming', 'age': 18, 'num': [1, 2, 3, 'alex'], 's1': {'xiao': 'han', 'gh': [1, 2, 3, 4]}, 'qq': 123, 'weighe': 180}

 

dic.pop(‘’)直接删
dic = {'name':'xiaoming','age':18}
dic.pop('age') print(dic)

 

有返回值,返回被删除的键值
dic = {'name':'xiaoming','age':18} s = dic.pop('age') print(s)
结果18
可设置返回值,如果没有对应的被删键值,返回自己设定的值,就是下面的‘不错’
dic = {'name':'xiaoming','age':18}
s = dic.pop('aa','不错')  #如果aa变成name,则返回小明
print(s)
结果  不错
dic.popltem()形式,随机删除一个,3.6版本默认删除最后一个

dic = {'aa':'xiaoming','age':18}
dic.popitem()
print(dic)

结果  {'aa': 'xiaoming'}
dic = {'aa':'xiaoming','age':18}  #这种,有返回值
print(dic.popitem())
结果 ('age', 18)

 

清空列表
dic = {'aa':'xiaoming','age':18}
dic.clear()

print(dic)

结果  {}

 

直接改
dic = {'name':'xiaoming','age':18} dic['age'] = 16 print(dic)

 

dic1.update(dic)覆盖增加,把dic覆盖增加到dic1中,
dic = {'name':'xiaoming','age':18} dic1 ={'name':'xiaojun','height':180} dic1.update(dic) print(dic1)
dic和dic1中对应的键,则用dic的键值覆盖dic1的,dic没有与dic1中对应的减,则直接加入dic1中,dic1中多的键值,则直接保留
结果{'name': 'xiaoming', 'height': 180, 'age': 18}

 

dic['直接查']直接查,没有会报错
dic = {'name':'xiaoming','age':18} print(dic["name"])
dic.get('high','设置返回的值‘)
dic = {'name':'xiaoming','age':18} print(dic.get("high","默认返回值") ) # 没有可以返回设定的返回值
#print(dic.get('high')) 默认返回None

 

只打印键
dic = {'name':'xiaoming','age':18} = dic = {'name':'xiaoming','age';18} for i in dic: = for i in dic.keys(): print(i) = print(i)

结果 name 结果 name
   age age

 

只打印值
dic = {'name':'xiaoming','age':18}
for i in dic.values():
    print(i)

结果  xiaoming
        18
a = 1
b = 2
a,b = b,a
print(a,b)

 

items  同时打印keys 和 valuces
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
for i in dic.items():
    print(i)