[python基础(三)]字典

一.映射与字典

映射:一种通过名字来引用值的数据结构。字典是Python中唯一内建的映射类型。

字典是另一种可变容器模型,且可存储任意类型对象。字典中的值没有特殊的顺序,但是都存储在一个特定的键(Key)下,其中键可以是数字,字符串或元组。

 

二,字典的创建

字典由多个键和对应的值构成的-组成。

Eg. haoma={'ming':'001','hong':'002','xin':'003','qing':'004'}
1.dict函数:通过其他映射或对的序列建立字典
eg.
items=[('name','ming'),('age',20)]
d=dict(items)
print d
2.基本字典操作
(1)len(d)返回d中键-值的数量;
(2)d[k]返回关联到键k上的值;
(3)d[k]=v 将值v关联到键k上;
(4)del d[k]删除键值为k的项;
(5)k in d 检查d中是否含所有键为k的项。
注:键可以是任意不可变类型
3.字典的格式化字符串(略)
4.字典方法:
(1)clear;
(2)copy;
(3)fromkeys;
(4)get;
(5)has_key;
(6)items和iteritems;
(7)keys和iterkeys;
(8)pop;
(9)popitem;
(10)setdefault
(11)update;
(12)values和itervalues
 
相关代码:
# -*- coding: utf-8 -*-

names=['ming','hong','xin','qing'] #人名
numbers=['001','002','003','004'] #对应的号码
print numbers[names.index('hong')] #查找某人的号码 002

#创建字典
haoma={'ming':'001','hong':'002','xin':'003','qing':'004'}
print haoma

#dict函数:通过其他映射或对的序列建立字典
items=[('name','ming'),('age',20)]
d=dict(items)
print d

c=dict(name='ming',age=20)
print c

#基本字典操作
print len(d) #2 :返回d中键-值的数量
print d['age'] #20:返回关联到键k上的值
d['age']=21
print d #{'age': 21, 'name': 'ming'} :将值v关联到键k上
del d['age']
print d #{'name': 'ming'}: 删除键值为k的项
print 'age' in d #False: 检查d中是否含所有键为k的项

#字典方法
#1.clear 清除字典中所有的项
x={}
y=x
x['name']='ming'
x['age']='21'
print x #{'age': '21', 'name': 'ming'}
x={} #x关联到新的空字典,对y无影响
print x #{}
print y #{'age': '21', 'name': 'ming'}


x={}
y=x #x,y对应同一个字典
x['name']='ming'
x['age']='21'
print x #{'age': '21', 'name': 'ming'}
x.clear() #clear清空原始字典
print x #{}
print y #{}


#2.copy 返回一个具有相同键-值对的新字典
#shallow copy浅复制
x={'ming':'001','hong':['002','003']}
print x #{'hong': ['002', '003'], 'ming': '001'}
y=x.copy()
y['ming']='004'
y['hong'].remove('003')
print y #{'hong': ['002'], 'ming': '004'}
print x #{'hong': ['002'], 'ming': '001'} #在副本替换值时,原始字典不受影响;但是修改就会影响原始字典

#deep copy 深复制 避免以上问题
from copy import deepcopy
x={}
x['name']=['ming','hong']
y=x.copy()
z=deepcopy(y)
x['name'].append('qing')
print y #{'name': ['ming', 'hong', 'qing']}
print z #{'name': ['ming', 'hong']

#3.fromkeys 使用给定的键建立新的字典,每个键都对应一个默认的值 None
print {}.fromkeys(['name','age']) #{'age': None, 'name': None}
print dict.fromkeys(['name','age'],'(unkown)') #{'age': '(unkown)', 'name': '(unkown)'}

#4.get 访问字典项
x['name']=['ming','hong']
print x.get('name') #['ming', 'hong'] 等于print x['name']
print x.get('age') #None print x['age']会出错

#5 has_key 检查字典中是否还有特定的键
x['name']=['ming','hong']
print x.has_key('name') #True
print x.has_key('age') #False

#6.items:将字典所以的项以列表的方式返回 iteritems:返回一个迭代器对象
x={'ming':'001','hong':'002'}
print x #{'hong': '002', 'ming': '001'}
print x.items() #[('hong', '002'), ('ming', '001')]
print x.iteritems() #<dictionary-itemiterator object at 0x0000000003B649A8> 以迭代器对象返回
print list(x.iteritems()) #[('hong', '002'), ('ming', '001')]

#7.keys:将字典中的键以列表的形式返回; iterkeys:返回针对键的迭代器
x={'ming':'001','hong':'002'}
print x.keys() #['hong', 'ming']['hong', 'ming']
print x.iterkeys() #<dictionary-keyiterator object at 0x0000000003B64BD8>
print list(x.iterkeys()) #['hong', 'ming']

#8.pop 获取对应于给定键的值,然后将这个键-值从字典中去除
x={'ming':'001','hong':'002'}
print x.pop('ming') #001
print x #{'hong': '002'}

#9.popitem 弹出随机的项(因为字典是无序的)
x={'ming':'001','hong':'002','xin':'003','qing':'004'}
print x.popitem() #('hong', '002')
print x #{'qing': '004', 'xin': '003', 'ming': '001'}
print x.popitem() #('qing', '004')
print x.popitem() #('xin', '003')
print x # {'ming': '001'} 可以用于一个接一个地移除并处理项

#10.setdefault :与get类似,能够获得与给定键相关联的值。此外,还没在字典中不含给定键的情况下设定键值
x={}
print x.setdefault('name') #None
print x #{'name': None}

#11.updata 利用一个字典更新另外一个字典
x={'ming':'001','hong':'002'}
y={'qing':'003'}
x.update(y)
print x #{'hong': '002', 'qing': '003', 'ming': '001'}


#12.values 返回字典中的值;itervalues返回值的迭代器
x={'ming':'001','hong':'002'}
print x.values() #['002', '001']
print x.itervalues() #<dictionary-valueiterator object at 0x0000000003B64F48>
print list(x.itervalues()) #['002', '001']
 
 
 

 

转载于:https://www.cnblogs.com/youngsea/p/7428074.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值