练习题
dic = {"name_list":['张三','lisi','隔壁王叔叔'], 'dic2':{'name':'太白','age':12}, }
#1 ,给列表追加一个元素:'旺旺'
#2,给列表lisi全部大写
#3,给dic2 对应的字典添加一个键值对:hobby:girl.
dic = {"name_list":['张三','lisi','隔壁王叔叔'],'dic2':{'name':'太白','age':12}}
dic['name_list'].append('旺旺') print(dic) dic['name_list'][1]= dic['name_list'][1].upper() print(dic) dic['dic2']['hobby']='girl' print(dic)
字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。
字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
可以放任意数据类型
数据类型的分类:
可变(不可哈希):不可变数据类型 list,dic,set
字典的值,不可变数据类型
不可变(可哈希):对原字符串没有任何改变,都是新的字符串 int,True,bool,str,tuple。
字典的键,是任意的数据类型
容器类型
容器:list,tuple,dic 可承载各种数据类型
字典的键不能重复,是唯一的
字典的顺序:
python 3.5之前, 字典是无序的
python 3.6开始,字典创建的时候,按照一定的顺序插入的数值,看起来是有序的,
----------------------------------------
增:
1.有则覆盖,无则添加
dic = {'age': 18, 'name': 'jin', 'sex': 'male', 'k': 'v'} dic['hobby'] = 'girl' print(dic)
{'name': 'jin', 'k': 'v', 'hobby': 'girl', 'sex': 'male', 'age': 18}
dic = {'age': 18, 'name': 'jin', 'sex': 'male', 'k': 'v'} dic['k'] = 'a' print(dic)
{'age': 18, 'name': 'jin', 'k': 'a', 'sex': 'male'}
2.setdefault 无则添加,有则不变
setdefault 在字典中添加键值对,如果只有键那对应的值是none,但是如果原字典中存在设置的键值对,则他不会更改或者覆盖。
dic = {'age': 18, 'name': 'jin', 'sex': 'male', 'k': 'v'} dic.setdefault('hobby') print(dic)
{'sex': 'male', 'hobby': None, 'k': 'v', 'name': 'jin', 'age': 18}
dic = {'age': 18, 'name': 'jin', 'sex': 'male', 'k': 'v'} dic.setdefault('hobby','girl') print(dic)
{'age': 18, 'name': 'jin', 'k': 'v', 'sex': 'male', 'hobby': 'girl'}
删
1.pop:python3.6 里删除最后一个,成对删除,通过键删除键值对
dic = {'age': 18, 'name': 'jin', 'sex': 'male', 'k': 'v'} dic.pop('age') print(dic)
{'name': 'jin', 'k': 'v', 'sex': 'male'}
dic.pop('hobby') print(dic)
报错
print(dic.pop('hobby',None))
不报错,又返回值None,返回你设定的值
2.clear 清空
dic.clear() print(dic)
{}
3.del dic['name']
del dic['name'] print(dic)
{'k': 'v', 'age': 18, 'sex': 'male'}
改
1.
dic['name'] = '太白' print(dic)
{'age': 18, 'name': '太白', 'sex': 'male', 'k': 'v'}
2.针对两个字典改,将dic键值对覆盖并添加到dic2 update
dic = {"name":"jin","age":18,"sex":"male"} dic2 = {"name":"alex","weight":75} dic2.update(dic) print(dic) print(dic2)
{'sex': 'male', 'age': 18, 'name': 'jin'} {'weight': 75, 'sex': 'male', 'name': 'jin', 'age': 18}
查 get,单个查询,for是多个查询
dic = {"name":"jin","age":18,"sex":"male"} print(dic.get('name'))
jin
dic = {"name":"jin","age":18,"sex":"male"} print(dic.get('name1',None))
dic = {"name":"jin","age":18,"sex":"male"} print(dic.get('name1'))不存在的默认返回none
其他方法:keys():不是列表,可循环,不能有索引,values(),item()
dic = {"name":"jin","age":18,"sex":"male"} print(dic.keys()) print(type(dic.keys()))
dict_keys(['age', 'name', 'sex']) <class 'dict_keys'>
for i in dic.keys(): print(i)
for i in dic: print(i)
默认打印键
sex
name
age
li = list(dic.keys()) print(li)
把键打印出列表形式
#特殊类型:dic转化成list
print(list(dic.keys()))
['age', 'name', 'sex']
#分别赋值
a,b = 2,3
print(a,b)
a,b = [2,3] print(a,b)
a,b = (2,3) print(a,b)
2,3
#面试题
a = 4 b =5 a,b = b,a print(a,b)
5,4
print(dic.values()) for i in dic.values(): print(i)
dict_values(['male', 'jin', 18]) male jin 18
print(dic.items()) for i in dic.items(): print(i)
dict_items([('name', 'jin'), ('age', 18), ('sex', 'male')]) ('name', 'jin') ('age', 18) ('sex', 'male')
dic = {'age': 18, 'name': 'jin', 'sex': 'male', 'k': 'v'} for k,v in dic.items(): print(k,v)
return:
k v
sex male
age 18
name jin
dic.setdefault('k','v') print(dic) # {'age': 18, 'name': 'jin', 'sex': 'male', 'k': 'v'} dic.setdefault('k','v1') # {'age': 18, 'name': 'jin', 'sex': 'male', 'k': 'v'} print(dic)