字典:当索引不好用时

1.字典的使用

字典是Python中唯一内建的映射类型。字典中的值没有特殊的顺序,但是都存储在一个特定的键(key)下。键可以是数字、字符串甚至是元组。

1.1字典的使用

字典中的键是唯一的(其他类型的映射也是如此),而值并不唯一
可以用dict函数来创建字典
items = {('name','zhao'),('age',42)}
d = dict(items)
print (d)
{'age': 42, 'name': 'zhao'}
#字典里的存储是没有顺序的

dict也可以通过关键字参数来创建字典
dd = dict(name='zhao',age=42)
dd
{'age': 42, 'name': 'zhao'}
#dict函数根本不是真正的函数,它是个类型,就像list、tuple和str一样

1.2字典的基本操作

字典的基本行为在很多方面与序列相似
键类型:字典的键可以是任意的不可变类型,比如浮点型、字符串和元组
自动添加:及时键起初在字典中并不存在,也可以为他赋值,这样字典就会建立新的项。
成员资格:表达式k in d(字典)查找的是键,而不是值。表达式v in l(列表)查找值,而不是索引

字典的格式化字符串
title = "world"  
year = 2013  
print ("hello %(titles)s, %(years)10d" % {"titles":title, "years":year})  
hello world,       2013

字典方法
就像其他内建类型一眼个,字典也有方法。
-clear
清除字典中的所有的项。这是个原地操作(类似list.sort),所以无返回值(或者说返回None)
x = {}
y = x
x['key'] = 'value'
print (y)
x = {}
print (y)
{'key': 'value'}
{'key': 'value'}

x = {}
y = x
x['key'] = 'value'
print (y)
x.clear()
print (y)
{'key': 'value'}
{}
两种情况中,x和y最初对应同一个字典。在第一种里,将x关联到一个新的空字典来清空x,对y一点影响都没有。而在第二种中,使用clear可以将x和y都清空

-copy
d = {'name':'zhao','age':[42,'man']}
c = d.copy()
c['name'] = 'qian'
c['age'].remove('man')
print (c)
print (d)
{'name': 'qian', 'age': [42]}
{'name': 'zhao', 'age': [42]}
可以看到,当在副本中替换值得时候,原始字典不受影响,但是修改了某个值,原字典也会改变(浅复制)

避免这一问题可以使用deepcopy(from copy import deepcopy)

-fromkeys
此方法使用给定的键建立新的字典,每个键对应一个默认的值None,当然也可以自己提供默认值
{}.fromkeys({'name','age'},'unknown')
{'age': 'unknown', 'name': 'unknown'}

-get
一般开说,试图访问字典中不存在的键时会出错,而使用get方法时就不会出错,默认返回None,也可以自己提供默认值
x = {}.fromkeys({'name','age'},'unknown')
d.get('sex','unknown')
'unknown'

-has_key
检查字典中是否含有特定的键。表达式d.has_key(k)相当于表达式k in d。返回True或者False

-items
items将字典中所有的项以列表的形式返回
d = {'name':'zhao','age':[42,'man']}
d.items()
dict_items([('name', 'zhao'), ('age', [42, 'man'])])

-keys
以列表的形式返回

-pop
将获得的键-值从字典中移除,返回移除键的值
d = {'name':'zhao','age':[42,'man']}
c = d.pop('name')
print (d)
print (c)
{'age': [42, 'man']}
zhao

-popitem
随机删除一个键-值,返回值是元组的形式被删除的键-值
d = {'name':'zhao','age':[42,'man']}
c = d.popitem()
print (d)
print (c)
{'name': 'zhao'}
('age', [42, 'man'])

-setdefault
方法类似于get,但会在字典中不含有给定键的情况下设定相应的键值
d = {'name':'zhao','age':[42,'man']}
c = d.setdefault('addr','unknown')
print (d)
print (c)
{'name': 'zhao', 'age': [42, 'man'], 'addr': 'unknown'}
unknown
#默认值值可选的,不设定,会默认使用None

-update
利用一个字典来更新另外一个字典
d = {'name':'zhao','age':[42,'man']}
c = {'sex':'male','name':'qian'}
d.update(c)
print (d)
{'name': 'qian', 'age': [42, 'man'], 'sex': 'male'}
相同键会覆盖,没有的将会添加到旧的字典中

-values
以列表的形式返回字典中的值
d = {'name':'zhao','age':[42,'man']}
c = {'sex':'male','name':'qian'}
d.update(c)
print (d)
d.values()
{'name': 'qian', 'age': [42, 'man'], 'sex': 'male'}
Out[165]:
dict_values(['qian', [42, 'man'], 'male'])














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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值