3.22 day5 字典
练习题
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)