python笔记四-字典

来源:互联网 发布:雅思写作小作文 知乎 编辑:程序博客网 时间:2024/05/20 16:01

1、当索引不好用时候,使用字典。

2、字典的定义:

>>> phonebook = {'Alice':'2341','Beth':'9102','Ceil':'3258'}
>>> PHONEBOOK
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    PHONEBOOK
NameError: name 'PHONEBOOK' is not defined
>>> phonebook
{'Beth': '9102', 'Alice': '2341', 'Ceil': '3258'}
>>> 

3、使用dict函数将序列建立字典

>>> items = [('name','Gumby'),('age',42)]
>>> d=dict(items)
>>> d
{'age': 42, 'name': 'Gumby'}

>>> d['name']
'Gumby'

删除字典的 键,使用 del d[key], 检测d中是否有key的键,使用 key in d,来判断成员资格

4、创建一个空的字典,符号是{}, 而不是[],创建之后可以直接添加键值,如下:

>>> x = []
>>> x[42] = 'Foobar'
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    x[42] = 'Foobar'
IndexError: list assignment index out of range
>>> x = {}
>>> x[42] = 'Foobar'
>>> x
{42: 'Foobar'}

5、利用字典格式化字符串,格式: “%(key)s” % d

>>> phonebook
{'Beth': '9102', 'Alice': '2341', 'Ceil': '3258'}
>>> "Ceil's phone number is %(Ceil)s." % phonebook
"Ceil's phone number is 3258."

>>> "Beth: %(Beth)s" % phonebook
'Beth: 9102'

6、字典方法

(1)clear。将清除原始字典的所有键值

>>> x = {}
>>> x['1'] = 'aaa'
>>> y = x
>>> y
{'1': 'aaa'}
>>> y.clear()
>>> y
{}
>>> x
{}

如果要求只清除x,而保留y的内容,可以执行x={},

(2)copy。执行浅复制

>>> x={'1':'aaa','2':['xx','yy','zz']}
>>> y = x.copy()
>>> y
{'1': 'aaa', '2': ['xx', 'yy', 'zz']}
>>> y['1'] = '111'
>>> x
{'1': 'aaa', '2': ['xx', 'yy', 'zz']}
>>> y
{'1': '111', '2': ['xx', 'yy', 'zz']}

注意:x的键值'1'没有改变,但是对y执行以下操作,x的内容发生了变化

>>> y
{'1': '111', '2': ['xx', 'yy', 'zz']}
>>> y['2'].remove('xx')
>>> y
{'1': '111', '2': ['yy', 'zz']}
>>> x
{'1': 'aaa', '2': ['yy', 'zz']}

注意:x键值'2'在执行remove之后发生了变化,x被修改了,为了达到复制之后相互独立的效果,深复制可以解决以上问题

>>> from copy import deepcopy
>>> d = {}
>>> d['111'] = ['aaa','bbb']
>>> c = d.copy()
>>> dc = deepcopy(d)
>>> d['111'].append('ccc')
>>> c
{'111': ['aaa', 'bbb', 'ccc']}
>>> dc
{'111': ['aaa', 'bbb']}

说明:c会随着d而修改,而dc 则不受影响。

(3)fromkeys 函数,构建字典键值

>>> {}.fromkeys(['key1','key2'])
{'key2': None, 'key1': None}

说明:以上通过空字典创建二对键值(键值列表为key1和key2),默认值为‘None’

>>> dict.fromkeys(['k1','k2','k3','k4'])
{'k4': None, 'k1': None, 'k3': None, 'k2': None}

说明:调用了dict的fromkeys函数

>>> dict.fromkeys(['key1','key2','key3','key4'],'unknown')
{'key1': 'unknown', 'key2': 'unknown', 'key4': 'unknown', 'key3': 'unknown'}

说明:默认值改为了‘unknown’

(4)get方法。可以安全访问字典中不存在的键值,一般常规下根据索引去访问键值会发生异常,而用get方法不会

>>> d = {}
>>> d['a']
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    d['a']
KeyError: 'a'
>>> d.get('a')
>>> print(d.get('a'))
None
>>> 

也可以提供默认输出值

>>> d.get('a','N/A')
'N/A'

正常访问存在的键值,如下

>>> d['a'] = 'aaaaa'
>>> d.get(['a'])
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    d.get(['a'])
TypeError: unhashable type: 'list'
>>> d.get('a')
'aaaaa'

(5)has_key方法。用来检查字典中是否存在某键key,但是python3.x不包括这个函数

>>> d
{'a': 'aaaaa'}

>>> d.has_key('a')
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    d.has_key('a')
AttributeError: 'dict' object has no attribute 'has_key'

可以用in来判断

>>> 'a' in d
True

>>> 'b' in d
False

(6)items和iteritmes,python3.x不支持iteritems,

>>> d = {'1':'aaa', '2':'bbb','3':'ccc','4':'ddd'}
>>> d.items
<built-in method items of dict object at 0x02D8AB20>
>>> d.items()
dict_items([('4', 'ddd'), ('3', 'ccc'), ('2', 'bbb'), ('1', 'aaa')])
>>> it = d.iteritems()
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    it = d.iteritems()
AttributeError: 'dict' object has no attribute 'iteritems'
>>> it = d.items
>>> list(it)
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    list(it)
TypeError: 'builtin_function_or_method' object is not iterable

(7)keys和iterkeys,python3.x不支持iterkeys

>>> d
{'4': 'ddd', '3': 'ccc', '2': 'bbb', '1': 'aaa'}

>>> d.keys
<built-in method keys of dict object at 0x02D8AB20>
>>> d.keys()
dict_keys(['4', '3', '2', '1'])

(8)pop弹出键值(返回值后从字典中删除)

>>> d
{'4': 'ddd', '3': 'ccc', '2': 'bbb', '1': 'aaa'}
>>> d.pop('1')
'aaa'
>>> d
{'4': 'ddd', '3': 'ccc', '2': 'bbb'}

(9)popitem随机弹出键值

>>> d
{'4': 'ddd', '3': 'ccc', '2': 'bbb'}
>>> d.popitem()
('4', 'ddd')
>>> d
{'3': 'ccc', '2': 'bbb'}

(10)setdefault,当键不存在,使用默认值设置键对应的值,如果存在键,忽略setdefault操作,均返回当前键对应的值

>>> d
{'3': 'ccc', '2': 'bbb'}
>>> d.setdefault('5','N/A')
'N/A'
>>> d
{'5': 'N/A', '3': 'ccc', '2': 'bbb'}
>>> d.setdefault('2','N/A')
'bbb'
>>> d
{'5': 'N/A', '3': 'ccc', '2': 'bbb'}

(11)update。用新字典的键值替换旧字典的键值

>>> d
{'5': 'N/A', '3': 'ccc', '2': 'bbb'}

>>> d1 = {'5':'eee'}
>>> d.update(d1)
>>> d
{'5': 'eee', '3': 'ccc', '2': 'bbb'}

(12)values和 itervalues

>>> d
{'5': 'eee', '3': 'ccc', '2': 'bbb'}

>>> d.values
<built-in method values of dict object at 0x02D8AB20>
>>> d.values()
dict_values(['eee', 'ccc', 'bbb'])

python3不支持value迭代器

>>> itv = d.values
>>> list(itv)
Traceback (most recent call last):
  File "<pyshell#41>", line 1, in <module>
    list(itv)
TypeError: 'builtin_function_or_method' object is not iterable
>>> itv = d.itervalues
Traceback (most recent call last):
  File "<pyshell#42>", line 1, in <module>
    itv = d.itervalues
AttributeError: 'dict' object has no attribute 'itervalues'
>>> itv = d.itervalues()
Traceback (most recent call last):
  File "<pyshell#43>", line 1, in <module>
    itv = d.itervalues()
AttributeError: 'dict' object has no attribute 'itervalues'








0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 亚马逊产品上架后货物没到怎么办 工行企业网银证书过期了怎么办 海淘转运地址国家填错了怎么办 集装箱实重与申报重量不一样怎么办 微博复制的淘口令找不到了怎么办 买了移动手机不能用联通卡怎么办 移动手机用联通卡网速慢怎么办 移动手机插联通卡没反应怎么办 移动手机办了联通大王卡怎么办 qq被冻结但是有至尊宝怎么办 qq被冻结了有至尊宝怎么办 移动电话卡注销了里面的钱怎么办 罗麦的oa上经理喜报没截图怎么办 工行融e联登录密码忘了怎么办 融e借有额度秒拒怎么办 工行银行柜台办理融e借怎么办 地球末日生存破解版金币没了怎么办 手机被别人骗走了里面的微信怎么办 在微信里面被做微商的骗了钱怎么办 在qq上骗了人50怎么办 被3m多酶清洗液滴到皮肤怎么办 做3m赔了9万怎么办 在携程网上订的酒店发票怎么办 滴滴滴取消订单电话打不通怎么办 百度云容量2068g满了怎么办 淘宝电脑端描述图片间隔大怎么办 手机上下载游戏自动扣费怎么办 苹果手机下载游戏自动扣费怎么办 用手机账号登陆游戏换手机怎么办 在qq上被骗充q币怎么办 微信借钱后删了好友怎么办 财付通绑定了其它人的身份证怎么办 微信支付密码忘了没绑银行卡怎么办 微信没有绑银行卡忘记密码怎么办 威信解绑银行卡支付密码望了怎么办 买了个qq号绑定了财付通怎么办 淘宝买的东西下架了怎么办 微信红包充话费充错了怎么办 手机qq不能发红包或转账怎么办 qq给人发红包被骗了怎么办 qq发红包对方看不不到怎么办