Python数据结构之字典
- 字典可以原地修改 是可变的 无序 key不可重复 value可重复
- 创建字典有3中方式
- 1.直接创建
>>> a_dict={'name':'naruto','age':16}
>>> a_dict
{'age': 16, 'name': 'naruto'}
- 2.利用元组tuple创建 dict(tuple)
>>> a_tu=(['one','naruto'],['two','sasuke'])
>>> n_dic=dict(a_tu)
>>> n_dic
{'two': 'sasuke', 'one': 'naruto'}
>>> ad=dict(name='naruto',girlfriend='hinata')
>>> ad #注意:这里的key=value key不是字符串格式的
{'girlfriend': 'hinata', 'name': 'naruto'}
>>>
- 3.使用空字典fromkeys(tuple,value)
>>> webs={}.fromkeys(('one','two'),'facebook')
>>> webs
{'two': 'facebook', 'one': 'facebook'}
>>>
字典的基本操作
- len(dic) 返回键值对的数量
- dic[key] 返回key对应的value
- dic[key]=value 为key赋值
- del dic[key] 删除key 及其value
- key in dic 检查字典中是否有key
- clear清空字典 得到一个空字典 与del不同 del将字典删除
- dic.get(key)与dic[key]不同的是 如果字典中不包含key是不会报错的 会返回None 还可以dic.get(key,default_value)没有key的情况下给个默认返回值
- dic.setdefault()与get()相似 不同点是 如果字典中没有包含key时会在原字典中添加新的键值对
浅复制与深复制
- 浅复制 x.copy()产生一个新的引用指向原来的对象
新老引用都指向同一对象
浅复制 x.deepcopy()产生一个新的引用的同时复制一个新的对象 新引用指向新对象 - 新老引用都指向不同对象 虽然对象内容是一样的 但是在内存中的地址不同
items iteritems
- 将字典转元组列表
>>> webs
{'two': 'facebook', 'one': 'facebook'}
>>> webs.items() #直接返回一个列表 里面的元素是元组
[('two', 'facebook'), ('one', 'facebook')]
>>> webs
{'two': 'facebook', 'one': 'facebook'}
>>> webs.iteritems() #返回的是迭代器对象
<dictionary-itemiterator object at 0x7f2722ea92b8>
>>> list(webs.iteritems()) #用list函数将迭代器转列表
[('two', 'facebook'), ('one', 'facebook')]
>>>
- 此外 还有类似的 keys/iterkeys values/itervalues
pop和popitem
- has_key()判断字典中是否包含key
- dic.pop(key) 删除一个键值对 返回其value 必须有参数
- dic.popitem() 随机删除一个键值对 并返回该键值对 不常用
- dic.update(a_dic) dic.update([tuples])字典中追加元素
>>> webs
{'one': 'facebook'}
>>> webs.update({'lang':'python'})
>>> webs
{'lang': 'python', 'one': 'facebook'}
>>> webs.update([('age',12),('hobbt','lol')])
>>> webs
{'lang': 'python', 'age': 12, 'hobbt': 'lol', 'one': 'facebook'}