娟斌心 发表于 2017-4-30 10:32:04

[Python入门及进阶笔记]Python-基础-字典小结

<style>
<!--
h1, h2, h3, h4, h5, h6, p, blockquote
{margin:0;
padding:0}
body
{font-family:"Helvetica Neue",Helvetica,"Hiragino Sans GB",Arial,sans-serif;
font-size:13px;
line-height:18px;
color:#737373;
background-color:white;
margin:10px 13px 10px 13px}
table
{margin:10px 0 15px 0;
border-collapse:collapse}
td, th
{border:1px solid #ddd;
padding:3px 10px}
th
{padding:5px 10px}
a
{color:#0069d6}
a:hover
{color:#0050a3;
text-decoration:none}
a img
{border:none}
p
{margin-bottom:9px}
h1, h2, h3, h4, h5, h6
{color:#404040;
line-height:36px}
h1
{margin-bottom:18px;
font-size:30px}
h2
{font-size:24px}
h3
{font-size:18px}
h4
{font-size:16px}
h5
{font-size:14px}
h6
{font-size:13px}
hr
{margin:0 0 19px;
border:0;
border-bottom:1px solid #ccc}
blockquote
{padding:13px 13px 21px 15px;
margin-bottom:18px;
font-family:georgia,serif;
font-style:italic}
blockquote:before
{content:"\201C";
font-size:40px;
margin-left:-10px;
font-family:georgia,serif;
color:#eee}
blockquote p
{font-size:14px;
font-weight:300;
line-height:18px;
margin-bottom:0;
font-style:italic}
code, pre
{font-family:Monaco,Andale Mono,Courier New,monospace}
pre
{display:block;
padding:14px;
margin:0 0 18px;
line-height:16px;
font-size:11px;
border:1px solid #d9d9d9;
white-space:pre-wrap;
word-wrap:break-word}
pre code
{background-color:#fff;
color:#737373;
font-size:11px;
padding:0}
-->
</style>



博客迁往:新地址(点击直达)
新博客使用markdown维护,线下有版本库,自己写的所以会定时更新同步,同时提供更好的导航和阅读体验
csdn对markdown支持不好,所以旧版不会花时间进行同步修订,抱歉


-----------------------

字典

定义
  dictionary
  1.键值对的集合(map)
  2.字典是以大括号“{}”包围的数据集合
  3.字典是无序的,在字典中通过键来访问成员。 可变的,可嵌套,可以原处修改扩展等,不产生新的字典
  4.字典的键,可以是字符串(大小写敏感),数字常量或元组(不可变类型),同一个字典的键可以混用类型。字典的键必须是可哈希的
  元组作为键的条件是,元组内的值都是不可变类型

a = (1,2)#可以作为键
b = (1,2,)#不可以

  5.字典的值可以是任意类型,可以嵌套,可以自由修改

声明
  创建字典的几种方式:
  1.基本

d = {} #空字典
d = {'name':'tom', 'age':22}
#等价
d = {}
d['name'] = 'tom'
d['age'] = 22

  2.dict

d = dict() #空
d = dict(name='tom', age=22)   
d = dict([('name','tom'), ('age',22)])
#等价
keys = ['name','age']
values = ['tom', 22]
d = dict(zip(keys,values))

  3.fromkeys
  不指定default_value的话,默认None

>>> dict.fromkeys(['name','age'],'default_value')
{'age': 'default_value', 'name': 'default_value'}

基本操作
  0.获取帮助

help(dict)

  1.判定键是否存在于字典中

if k in d:   #k not in
dosomething()

  2.读取

d = {'a':1, 'b':2}
print d['a']#得到1,但是若键不存在,将引发异常KeyError。慎用,建议不使用
print d.get('c', 3) #得到3,get方法,若是键不存在,返回第二个参数default_value.若是没有设default_value返回None

  处理missing-key错误三种方式,根据具体需要

if k in d:
print d
try:
print d
except KeyError:
dosomething()
print d.get(k, default)
#等价 d if k in d else default

  3.遍历
  方式1:

for key in d:
print key, d
#等价 for key in d.keys()

  方式2:

for key,value in d.items():
print key, value

  4.修改方式1:某个键值对

d['key'] = 'newvalue'

  方式2:批量添加或更新

#另一个字典
d.update({'key':'newvalue'})#这里支持一整组值
#元组列表
d.update( [ ('a',1), ('b',2) ] ) #每个元组两个元素,(key,value)
#**key
d.update(c=3, e=4)

  5.删除

del d['key']
value = d.pop('key') #删除并返回值
d.clear() #清空

  6.其他:

len(d)   #长度
d.keys()#key列表
d.values()#value列表
d.items()   #(key, value) 列表
c = d.copy()   #浅拷贝
#返回迭代器,节省内存
d.iterkeys()
d.itervalues()
d.iteritems()
d.setdefault('name', 'ken') #若原来没有,设置,否则原值不变

其他
  1.字典排序按照key排序

keys = d.keys()
keys.sort()
for key in keys:
print d.get(key)

  按照value进行排序

sorted(d.items(), lambda x,y: cmp(x,y))

  另外:

#假设d为字典
sorted(d)#返回同 sorted(d.keys()),返回的是key排序

  2.自定义对象作为key
  必须:

def __hash__(self):
pass
def __eq__(self, other):
pass

  3.字典拷贝浅拷贝:

c = d.copy() #

  深拷贝必须用copy模块

form copy import deepcopy
c = deepcopy(d)

  4.一种使用场景假设有一个很大的列表l,假设10w条记录
  有一个小列表b,要判断b中元素是否在l中
  如果:

for i in b:
if i in l:
dosomething()

  你会发现非常非常慢...因为第二个in语句,会遍历10w条….
  改进:

d = dict.fromkeys(l)
for i in b:
if i in d:
dosomething()
#空间换时间,O(n) -> O(1)

  The end!
  To be continue
  wklken
  Email: wklken@yeah.net
  Blog: http://blog.csdn.net/wklken
  2013-03-09
  转载请注明出处,谢谢
页: [1]
查看完整版本: [Python入门及进阶笔记]Python-基础-字典小结