字典
字典字典取值操作字典函数字典方法扩展思考
字典
字典是另一种可变容器类型,可存储任意类型对象。语法结构:字典名={key1:value1,key2:value2}—键值对
my_dict1
= {1001:'老张',1002:'老王',1003:'老李'}
print('值为:',my_dict1
,'类型为:',type(my_dict1
))
列表和字典的区别:
列表元素进行修改的话,通过索引进行修改,如果当前元素的顺序发生改变,此时还需要修改索引才能成功完成元素的修改。字典既能存储多个数据,又能很方便准确的定位元素。
字典的核心特性:
字典使用{},因为json使用{},{}表示键值对的写法,传输数据效率极快关键字 dict通过键取值,键不可重复,值可以重复。与Java中的map相同。键key和数据库的id主键原理一样字典的键可以是任意不可变的对象(int,str,bool,tuple…)但一般都用strMap<Integer,string> map = new Map<Integer,string>
字典取值操作
my_dict2
= {'name':'tom',
'age':'18',
'gender':'man'
}
print('取一个值:',my_dict2
['name'])
print('取多个值:',my_dict2
['name'],my_dict2
['age'])
print('不存在的键',my_dict2
['sex'])
print('get方法有值:', my_dict2
.get
('name'))
print('get方法无值:', my_dict2
.get
('name1'))
总结:
key-value的情况下,企业优先使用key获取值,不适用index索引键定义为str类型键获取值的原理:Mapping映射关系
字典函数
person1
= {'1001': 'TonyTeacher','1002': 'LaoWang','1003': 'FengSister'}
person2
= {'1001':"Dog",'1002':'Cat'}
print('person1的字典值为:',person1
)
print('person2的字典值为:',person2
)
print('person1的字典Type为:',type(person1
))
print('person2的字典Type为:',type(person2
))
print('person1的字典len为:',len(person1
))
print('person2的字典len为:',len(person2
))
str() 通过str表示将元素的值按照字符串输出
person3
= {'name': "Dog", 'age': '3', 'gender': 'man', 18: 19}
result2
= str(person3
)
print('此时person3的类型为:', type(person3
))
print('person3的值为', result2
)
"""
思考:获取person3值的方法: get index key 切片
- 通过str可以将[] {}内的值一次性输出,并且不需要类型转换
- str不仅表示一个字符串还表示一个函数一个方法
"""
dict.fromkeys(seq) 表示将字典、元组里面的值当键输出。seq表示一个对象或者参数 。
seq
= ('name', 'age', 'sex')
result3
= dict.fromkeys
(seq
)
print('result3的值为:', result3
)
result4
= dict.fromkeys
(seq
,'jack')
print('result4的值为:', result4
)
seq2
= {'name':'dog', 'age':12, 'sex':'man'}
result5
= dict.fromkeys
(seq2
)
print('result5的值为:', result5
)
key in dict 如果键在字典里面则返回true,否则返回false。
seq3
={'name':['tom','jack'],'age':18,'sex':'男',18:19}
if 'name' in seq3
:
print("键name在字典中存在")
else:
print("键name在字典中不存在")
dict.keys() 以列表返回一个字典所有的键。
seq4
={'name':['tom','jack'],'age':18,'sex':'男',18:19}
print(seq4
.keys
())
dict.values() 以列表返回一个字典中的所有值。
dict1
={'name':'tom','age':18}
print(dict1
.values
())
my_dict3
= {'name':'tom',
'age':'18',
'gender':'man',
'name2':'tony',
}
my_dict3
['name2'] = 'tonyTeacher'
my_dict3
['name3'] = 'bobTeacher'
setdefault() 定义key-value,若存在不改变,不存在新生成。
result
= my_dict3
.setdefault
('birthday',1998)
print('result值:',result
)
update()更新key—value,若都有不改变,若有新则更新。
a
= {'1':1,'2':2,'3':3}
b
= {'4':4,'5':5,'1':1}
print('更新前的a:',a
)
a
.update
(b
)
print('更新后的a:',a
)
字典方法扩展
del 删除 既可以删除指定的字典元素(列表也可以指定),也可以删除整个字典,如果不指定key,代表删除整个字典。
d
={'name':'tom','age':18}
del d
['name']
print('删除后的:',d
)
del d
print('删除后的:',d
)
clear()清空字典 用来清空字典,被清空的字典最后会剩下一个空的字典在,而用del删除的字典在程序当中就不存在了。
d1
={'name':'tom','age':18}
d1
.clear
()
print('清空后:',d
)
pop() 根据key删除字典中的key-value
d2
={'name':'tom','age':18}
d2
.pop
('name')
d2
.pop
('name1')
思考
假设函数没有(),效率如何? 在企业工作中受用()函数式元组赋值,不建议使用省略(),影响数据的性能问题
计算机语言的括号适用原则:
([ ]){[ ],[ ]}“’ '”
keys底层实现原理----可以一次性查询所有键,为什么?
D.keys() -> a set-like object providing a view on D’s keys "key底层其实就是一个实现like函数的查询方法,但like查询效率太低like不可以满足查询海量数据的操作
面试必问: like有几种用法?like的缺点。
用法: select name from emp like name = ‘% 王%’ select name from emp like name = ‘王%’ select name from emp like name = '%王’ select name from emp like name = ‘_王’ select name from emp like name = ‘%’ !现已禁用!缺点: like查询数据会产生缓存。 like在操作数据时会将数据切片。数据可能不是很完整。
为什么python的key也用str? 因为服务器永远是字符串类型,胶水语言