Python基础语法- 3-2

3.3 字典

键值对 无序的 可变序列

通过键对象 快速获取、删除、更新 值对象

键不可重复

  1. 创建
	
	a = {'name':'hhh','age':18}
	b = dict('name':'hhh','age':18)
	c = [('name':'hhh','age':18)]
	
	k = ['name','age']
	v = ['hhh',18]
	d = dict(zip(k,v))
	
	e = dict.fromkeys('name','age')   # 值为None
	
  1. 访问
	
	a = {'name':'hhh','age':18}

    a['name']   # 通过键
    
    a.get("name")
    a.get("666",'不存在')   # 当666不存在时,返回不存在
    
    a.items()   # 显示所有键值对
    a.keys()   # 显示所有键
    a.values()   # 显示所有值
    
    len()
    
    'name' in a
	
  1. 增删、修改
	
	a['job'] = 'student'    # 键不存在则增加,存在则覆盖
	
	a.update(b)     # 用B覆盖A
	
	pop()   # 删除并返回
	del()
	clear() # 删除所有键值对
	
	popitem()   # 随机删除和返回该键值对
  1. 序列解包

方便对多个变量赋值

	
	s = {'name':'hhh','age':18}
	
	a,b = s
	# a = 'name' b = 'age'
	
	c,d = s.value()
	# c = 'hhh' d = 18
	
	e = s.items()
	# e('name','hhh')   # e[0] e[1]
  1. 复杂表格数据存储
    emmm其实一点也不复杂,这里练到的程度

但是 很重要哦 基础

	# 创建表格
	# 先创建每一行(字典)
    r1 = {'name':'haojiahuo','age':18}
    r2 = {'name':'huaijiahuo','age':19}
    
    # 组成表格(列表)
    tb = [r1,r2]

    # 打印表中所有的数据
    for i i range(len(tb)):
        print(tb[i].get('name'),tb[i].get('age'))

  1. 字典核心底层原理(重要)

字典对象核心:散列表->稀疏数组->数组的每一个单元bucket->键对象引用+值对象引用

# 1. 存
	bin(hash('name')) # 计算键name的散列值
	
	从右到左找偏移量 直到遇到空的偏移量 可以放进去

# 2. 取 
    相同的

  1. 字典的特点

    a. 键必须可散列(数字、字符串、元组)、

     自定义对象需(
         支持hash()函数、
         支持通过__eq__()方法检测相等性、
         若a==b->hash(a)==hash(b)
     )
    

    b. 字典在内存中开销过大,空间换时间

    c. 键查询速度很快

    d. 在字典中添加新键可能导致扩容、导致散列表中键的次序变化->不要在遍历字典的同时进行修改字典

3.4 集合

无序可变,元素不能重复(底层实现是字典)

  1. 创建、删除
	a = {2233,'ggg'}
	
	a = ['a','b','c']
	b =set(a)   # 把列表等其他变为集合 
	
	b.remove('a')
	a.clear()   # 全部清空
	
  1. 相关操作
    # 并集
	a | b
	a.union(b)
    
    # 交集
	a & b
	a.intersection(b)
	
	# 差集
	a - b
	a.difference(b)
	

你可能感兴趣的:(python基础,python,字典)