python字典dict

字典dict

 

1、字典是可变的、无序的、key不重复(可hash)的非线性结构;【set的元素就是key,key可hash唯一,任何可变的数据结构(list,bytearry,dict,set)都不可以hash】

 

 

*args表示任何多个无名参数,它是一个tuple

**kwargs表示关键字参数,它是一个dict

2、字典的定义:【构造字典的特点:因为字典是键值对构成的,构造的时候要么是空的,要么是两个两个构造(1、key=value 2、可迭代对象内是二元的)】

【1】d = dict() 或者 d = {}

【2】dict(**kwargs) 使用可迭代对象和 name=value对 构造字典,不过可迭代对象的元素必须是一个二元结构;(eg = [ ('a',1) ] 或者 [['a',1]] ) 两层嵌套,里外两层可以是列表也可以是元组;他们可以相同;也可以理解为dict() 里必须为可迭代对象,而可迭代对象必须为二元的(两个两个的)

eg:d = dict(((1,'a'), (2,'b'))) 或者 d = dict(([1,'a'] , [2,'b']))

a = dict(a=1,b=2) 【a,b是标识符,不能使用数字开头】

a = dict( [('a',1),('b',2),c = 3,d = 4] ) 特别注意: 其中c = 3,d = 4与二元结构混合时必须写到末尾,否则报错;这里如果有a = 5会覆盖二元结构中的a,但是如果这里再多写一个c = 6就会报错,并不会覆盖之前的c = 3【**kwargs】

【3】dict(mapping, **kwarg) 使用一个字典构建另一个字典;

【5】d = {‘a’:10,‘b’:20,‘c':None,’d‘:[1,2,3] }

【6】类方法 dict.fromkeys(iterable,value)

eg: d = dict.fromkeys(range(5))

d = dict.fromkeys(range(5),0)

 

3、字典元素的访问

【1】d[ key ]

1、返回key对应的值value

2、如果key不存在抛出KeyError异常

【2】get( key [,default] )

1、返回key对应的value值

2、如果key不存在返回缺省值default,如果没有设置缺省值就返回None

 

特别注意:d[ key ]中如果key不存在会报异常、会报异常、会报异常;而get(key[,default])如果key不存在则不会报异常、不会报异常、不会报异常;

 

【3】setdefault( key[,default] )

1、返回key对应的值

2、key不存在,添加kv对,value设置为default,并返回default,如果default没有设置,缺省值为None;

 

4、字典增加和修改

【1】d[key] = value

1、将key对应的值修改为value

2、key不存在添加新的kv对

【2】update( [other] ) → None

1、使用另一个字典的kv对更新本字典;(二元组,a=1都可以)

2、key不存在,就添加;

3、key存在,覆盖已经存在的key对应的值;

4、就地修改

 

5、字典的删除

【1】pop(key[,default ])

1、key存在,移除它,并返回它的value;

2、key不存在,返回给定的default;

3、default未设置,key不存在则抛出KeyError异常;

【2】popitem():随机删除

1、移除并返回一个任意的键值对;【返回的是一个元组】

2、字典为empty(空),抛出KeyError异常;

【3】clear()

1、清空字典;

【4】del 语句

1、del a[ 'c' ]:看着像是删除了一个对象,本质上减少了一个对象的引用,del实际上删除的是名称,而不是对象;

2、如果key不存在,会报NameError异常;

6、字典的遍历【在迭代的过程中字典不能被改变(长度)】

【1】dict.keys()

1、keys()可以不写直接遍历字典,默认遍历字典的key;

2、返回的是可迭代对象;

【2】dict.values()

1、如果要遍历字典的 value 必须写dict.values(),value()不能省略;

2、返回可迭代对象;

【3】dict.items()

1、要遍历 kv 对 items() 不能省略;

2、返回的是可迭代对象,【可迭代对象是一个个元组tuple】

eg:for k,v in dict.items():【items是二元组,所以必须拿k,v拆,拆了可单找key或者value;不拆的话直接拿一个标识符,则表示返回二元组键值对】

 

总结:

【1】Python3中,keys、values、items方法返回一个类似一个生成器的可迭代对象,不会把函数的返回结果复制到内存中;

【2】Dictionary view对象,可以使用len() 、iter() 、in 操作;【iter():返回的是一个迭代器对象;】

【3】字典的entry(items或者kv对)的动态的视图,字典变化,视图将反映出这些变化;【实时变化,如果字典发生了改变,调用视图方法将改变后的结果实时返回】

【4】keys返回一个类set对象,也就是可以看做一个set集合。如果values都可以hash,那么items也可以看做是类set对象;

 

特别注意:

【在迭代的过程中字典不能被改变(长度)】、如果想在迭代过程中删除字典,必须记录字典的key值,在另一个不是遍历字典的循环中来删除字典(遍历这些key);【列表list在迭代过程中删除元素,使用while循环,使用for循环删不干净】

eg:keys = []

for k in dict.keys():

if k % 2:

keys.append(k)

 

for k in keys:

dict.pop(k)

 

7、缺省字典defaultdict

collections模块下的defaultdict,【缺省字典的使用:当key不存在时,就会调用缺省字典,使用缺省字典中的函数方法构造一个空的1键值对,value类型需要看该函数方法的类型】

defaultdict(list):当key缺省时构造键值对,value为空list列表;

 

8、有序字典OrderedDict

key并不是按照加入的顺序排列,可以使用OrderedDict记录顺序

【1】有序字典可以记录元素插入的顺序,打印的时候也是按照这个顺序输出打印;

【2】3.6版本的Python的字典就是记录key插入的顺序(IPython不一定有效果)

【3】应用场景:

1、假如使用字典记录了N个产品,这些产品使用ID由小到大加入到字典中;

2、除了使用字典检索的遍历,有时候需要去除ID,但是希望是按照输入的顺序,因为输入顺序是有序的;

3、否则还需要重新把遍历到的值排序;

9、sorted(iterable,reverse=False)

sorted函数排序后返回一个新的列表,列表里放着你需要排的数,并不会影响原本的iterable;

 

10、统计dict中有default的方法:

get(key[,default])

setdifaultdict(key[,default])

pop(key[,default])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值