Python内置数据结构-字典

字典

key-value键值对的数据的集合

可变的 无序的 key不重复

字典的key
key的要求和set的元素要求一致
set的元素可以就是看做key,set可以看做dict的简化版
hashable可哈希才可以作为key,可以使用hash()测试

字典(dict)定义 初始化
1.d = dict() or d = {}
2.dict(**kwargs)
使用name=value对初始化一个字典
3.dict(iterable,**kwarg)
使用可迭代对象和name=value对构造字典,不过可迭代对象的元素必须是一个二元结构 d = dict(((1,‘a’),(2,‘b’)))或者 d =dict(([1,‘a’],[2,‘b’]))
4.dict(mapping,**kwarg)
使用一个字典构建另一个字典
d = {‘a’:10,‘c’:None,‘d’:[123]}
5.类方法dict.fromkeys(iterable,value)
d = dict.fromkeys(range(5))
d = dict.fromkeys(range(5),0)

字典元素的访问
1.d[key]
返回key对应的值value
key不存在抛出KeyError异常
2.get(key[,default])
返回key对应的值value
key不存在返回缺省值,如果没有设置缺省值就返回None
3.setdefault(key[,default])
返回key对应的值value
key不存在,添加kv对,value设置为default,并返回default,如果default没有设置,缺省值位None

字典增加和修改
1.d[key] = value
将key对应的值修改为value
key不存在添加新的kv对
2.update([other]) -> None
使用另外一个字典的kv对更新本字典
key不存在,就添加
key存在,覆盖已经存在的key对应的值
就地修改
d.update(red=1)
d.update(((‘red’,2),))
d.update({‘red’:3})

字典删除
1.pop(key[,default])
key存在,移除它,并返回它的value
key不存在,返回给定的default
default未设置,key不存在则抛出KeyError异常
2.popitem()
移除并返回一个任意的键值对
字典为empty,抛出KeyError异常
3.clear()
清空字典

4.del语句
a = True
b = [6]
d = {‘a’:1,‘b’:b,‘c’:[1,3,5]}
del a
del b[0]
del d[‘c’]
del a[‘c’]看着像删除了一个对象,本质上减少了一个对象的引用,del实际上删除的是名称,而不是对象

字典遍历
for … in dict
遍历key
for k in d:
print(k)

for k in d.keys():
print(k)

遍历value
for k in d:
print(d[k])

for k in d.keys():
print(d.get(k))

for v in d.values():
print(v)

遍历item,即kv对
for item in d.items():
print(item)

for item in d.item():
print(item[0],item[1])

for k,v in d.items():
print(k,v)

for k,_ in d.items():
print(k)

for _,v in d.items():
print(v)

总结:Python3中,keys values items方法返回一个类似一个生成器的可迭代对象,不 会把函数的返回结果复制到内存中
返回Dictionary view对象,可以使用len() iter() in操作
字典的entry的动态的视图,字典变化,视图将反映出这些变化
keys返回一个类set对象,也就是可以看做一个set集合.
如果values都可以hash,那么items也可以看做是类set对象

Python2中,上面的方法会返回一个新的列表,占据新的内存空间.所以Python2建议使用iterkeys itervalues iteritems版本,返回一个迭代器,而不是返回一个copy

defaultdict:缺省字典
collections.defaultdict([default_factory[,…]])
第一个参数是default_factory,缺省值是None,它提供一个初始化函数.当key不存在的时候,会调用这个工厂函数来生成key对应的value
构造一个字典,values是列表,为其添加随机个元素
例如:
import random
d1 = {}
for k in ‘abcdef’:
for v in range(random.randint(1,5)):
if k not in d1.keys():
d1[k] = []
d1[k].append(v)
print(d1)

from collections import defaultfict
import random
d1 = defaultdict(list)
for k in ‘abcdef’:
for v in range(random.randint(1,5)):
if k not in d1.keys():
d1[k] = []
d1[k].append(v)
print(d1)

OrderedDict:有序字典
collections.OrderedDict([items])
key并不是按照加入的顺序排列,可以使用OrderedDict记录顺序
from collections import OrderedDict
import random
d = {‘banana’:3,‘apple’:4,‘p’:1,‘o’:2}
print(d)
keys = list(d.keys())
random.shuffle(keys)
print(keys)
od = OrderedDict()
for key in keys:
od[key] = d[key]
print(od)
print(od.keys)

有序字典可以记录元素插入到顺序,打印的时候也是按照这个顺序输出打印
3.6版本的Python的字典就是记录key插入的顺序(IPython不一定有效果)
应用场景:
假如使用字典记录了N个产品,这些产品使用ID由小到大加入字典中
除了使用字典检索的遍历,有时候需要取出ID,但是希望按照输入的顺序,因为输入顺序是有序的
否则还需要重新把遍历的值排序

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值