python之字典

字典
  • 字典是另一种可变容器类型,可存储任意类型对象。
  • 语法结构:字典名={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…)但一般都用str
  • Map<Integer,string> map = new Map<Integer,string>
字典取值操作
# dict['']取值
my_dict2 = {'name':'tom',
            'age':'18',
            'gender':'man'
            }  # 规范,可读性
print('取一个值:',my_dict2['name'])
print('取多个值:',my_dict2['name'],my_dict2['age'])
# 使用不存在的键,报错
print('不存在的键',my_dict2['sex'])  # KeyError:   ---空指针

# get方法取值
print('get方法有值:', my_dict2.get('name'))  # 有值
print('get方法无值:', my_dict2.get('name1'))  # 无值 none----企业大量使用该方法

总结:

  • 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))
# 源码快捷键  ctrl+左键点击要查看的函数名,可以查看对应函数的底层代码
  1. str() 通过str表示将元素的值按照字符串输出
# 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不仅表示一个字符串还表示一个函数一个方法
"""
  1. dict.fromkeys(seq) 表示将字典、元组里面的值当键输出。seq表示一个对象或者参数 。
# dict.fromkeys(seq)  seq表示一个对象或者参数  fromkeys(seq)表示将字典、元组里面的值当键输出
seq = ('name', 'age', 'sex')
result3 = dict.fromkeys(seq)
print('result3的值为:', result3)
result4 = dict.fromkeys(seq,'jack')
print('result4的值为:', result4)

# dict.fromkeys(seq)能否输出值呢?
# 结果:None
seq2 = {'name':'dog', 'age':12, 'sex':'man'}
result5 = dict.fromkeys(seq2)
print('result5的值为:', result5)

  1. key in dict 如果键在字典里面则返回true,否则返回false。
# key in dict 如果键在字典里面则返回true,否则返回false
seq3={'name':['tom','jack'],'age':18,'sex':'男',18:19}
if 'name' in seq3:
 print("键name在字典中存在")
else:
 print("键name在字典中不存在")
  1. dict.keys() 以列表返回一个字典所有的键。
# dict.keys() 以列表返回一个字典所有的键
seq4={'name':['tom','jack'],'age':18,'sex':'男',18:19}
print(seq4.keys())
  1. dict.values() 以列表返回一个字典中的所有值。
# dict.values() 以列表返回一个字典中的所有值
dict1={'name':'tom','age':18}
print(dict1.values())
my_dict3 = {'name':'tom',
            'age':'18',
            'gender':'man',
            'name2':'tony',
            }# 规范
my_dict3['name2'] = 'tonyTeacher'  # key存在,覆盖原来的值
my_dict3['name3'] = 'bobTeacher'  # key不存在,新生成一条数据
  1. setdefault() 定义key-value,若存在不改变,不存在新生成。
# setdefault()定义key-value,若存在不改变,不存在新生成。
result = my_dict3.setdefault('birthday',1998)
print('result值:',result)
  1. update()更新key—value,若都有不改变,若有新则更新。
# 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)
字典方法扩展
  1. del 删除
    既可以删除指定的字典元素(列表也可以指定),也可以删除整个字典,如果不指定key,代表删除整个字典。
# del 删除,既可以删除指定的字典元素(列表也可以指定),也可以删除整个字典,如果不指定key,代表删除整个字典。
d={'name':'tom','age':18}
del d['name']  # 删除指定的字典元素
print('删除后的:',d)
del d  # 删除整个字典
print('删除后的:',d)
  1. clear()清空字典
    用来清空字典,被清空的字典最后会剩下一个空的字典在,而用del删除的字典在程序当中就不存在了。
# clear()用来清空字典,被清空的字典最后会剩下一个空的字典在,而用del删除的字典在程序当中就不存在了。
d1={'name':'tom','age':18}
d1.clear()
print('清空后:',d)
  1. pop()
    根据key删除字典中的key-value
# pop() 根据key删除字典中的key-value
d2={'name':'tom','age':18}
d2.pop('name')  # 会将被删除的value返回!
# 如果删除不存在的key,会抛出异常
d2.pop('name1')  # 如果指定了默认值,再删除不存在的key时,不会报错,而是直接返回默认值
思考

假设函数没有(),效率如何?
在企业工作中受用()函数式元组赋值,不建议使用省略(),影响数据的性能问题

计算机语言的括号适用原则:

  • ([ ])
  • {[ ],[ ]}
  • “’ '”

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?
因为服务器永远是字符串类型,胶水语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值