字典的创建和使用

直接创建

d = {'age': 23, 'name': 'Daniel', 'sex': 1}

输出结果:
{'age': 23, 'name': 'Daniel', 'sex': 1}


dict函数

# 通过序列对建立字典
vaulues = [('name', 'Daniel'), ('age', 23), ('sex', 1)]
print dict(values)

# 通过关键字建立字典
print dict(name='Daniel', age=23, sex=1)

# 如果 dict 不传入任何参数将会返回一个空字典
print dict()

输出结果:
{'age': 23, 'name': 'Daniel', 'sex': 1}
{'age': 23, 'name': 'Daniel', 'sex': 1}
{}


基本字典操作

d = {'name': 'Daniel', 'age': 23, 'sex': 1}

# 返回d项中(键-值对)的数量
len(d) 

# 删除键为name的项
del d['age']

# 检查d中是否含有键为name的项,返回True或者False
'name' in d

提示:在字典中检查键的成员资格比在列表中检查值的成员资格更高效,数据结构的规模越大,两者的效率差距越明显。


字典的键类型(任何不可变类型):int, float, string, tuple

{1: 'Daniel'}  # int
{1.2: 'Daniel'}  # float
{'name': 'Daniel'}  # string
{('name', 'Daniel'): 23}  # tuple

字典的格式化字符串

data = {'name': 'Daniel', 'age': 23, 'sex': 1}

template = 'name=%(name)s,age=%(age)s,sex=%(sex)s'
print template % data

template = 'name={name},age={age},sex={sex}'
print template.format(**data)

输出结果:
name=Daniel,age=23,sex=1
name=Daniel,age=23,sex=1


字典方法

1、clear 清除字典中所有项
d = {'name': 'Daniel', 'age': 23, 'sex': 1}
d.clear()
print d
>>> {}
2、copy 返回一个具有相同键值对的新字典(这个方法实现的浅复制)
data1 = {'name': 'Daniel', 'machines': ['foo', 'bar', 'baz']}
data2 = data1.copy()
data1['name'] = 'biu'
data1['machines'].remove('bar')
print data1
print data2

输出结果:
{'name': 'Daniel', 'machines': ['foo', 'baz']}
{'name': 'biu', 'machines': ['foo', 'baz']}

浅复制说明:(待说明...)

3、deepcopy 返回一个具有相同键值对的新字典(这个方法实现的深复制)
from copy import deepcopy
data1 = {'name': 'Daniel', 'machines': ['foo', 'bar', 'baz']}
data2 = deepcopy(data1)
data1['name'] = 'biu'
data1['machines'].remove('bar')
print data1
print data2

输出结果:
{'name': 'biu', 'machines': ['foo', 'baz']}
{'name': 'Daniel', 'machines': ['foo', 'bar', 'baz']}

深复制说明:(待说明...)

4、fromkeys 使用给定的键建立新的字典,每个键默认对应的值为None
print dict.fromkeys(['name', 'age'])
# 如果不想使用None作为默认值,也可以自己提供默认值
print dict.fromkeys(['name', 'age'], 'null')

输出结果:
{'age': None, 'name': None}
{'age': 'null', 'name': 'null'}

5、get 是一个更宽松的访问字典项的方法,访问一个不存在的键时,没有任何异常,而得到了None值。还可以自定义默认值,替换None
d = {}
print d.get('name')
print d.get('name', 'N/A')
d['name'] = 'Daniel'
print d.get('name')

输出结果:
None
N/A
Daniel

6、has_key 检查字典中是否含有给出的键,相当于表达式 k in d,使用那种方式很大程度取决于个人爱好。Python 3.0中不包含这个函数。
d = {}
print d.has_key('name')
d['name'] = 'Daniel'
print d.has_key('name')

输出结果:
False
True

7、items和iteritems

items将所有的字典以列表方式返回,这些列表项中的每一项都来自(键, 值)。但是在返回是并没有特殊的顺序。
iteritems的作用大致相同,但是会返回一个迭代器对象而不是列表

d = {'title': 'Python', 'url': 'http://www.python.org', 'spam': 0}
print d.items()

d = {'title': 'Python', 'url': 'http://www.python.org', 'spam': 0}
it = d.iteritems()
print it
print list(it)

输出结果:
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python')]
<dictionary-itemiterator object at 0x108d12680>
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python')]

8、keys和iterkeys,keys将字典中的键以列表形式返回,而iterkeys则返回针对键的迭代器
d = {'title': 'Python', 'url': 'http://www.python.org', 'spam': 0}
print d.keys()
print d.iterkeys()

输出结果:
['url', 'spam', 'title']
<dictionary-keyiterator object at 0x108d126d8>

9、pop 用来获得对应于给定键的值,然后将这个键-值对从字典中移除
d = {'name': 'Daniel', 'age': 23, 'sex': 1}
d.pop('age')
print d

输出结果:
{'name': 'Daniel', 'sex': 1}

9、popitem 弹出随机的项,因为字典并没有最后的元素或者其它有关顺序的概念
d = {'name': 'Daniel', 'age': 23, 'sex': 1}
print d.popitem()
print d

输出结果:
('age', 23)
{'name': 'Daniel', 'sex': 1}

10、setdefault 类似于get方法,就是能够获得与给定键相关关联的值,还能在字典中不含有给定键的情况下设定相应的键值
d = {}
print d.setdefault('name', 'N/A')
print d
d['name'] = 'Daniel'
print d.setdefault('name', 'N/A')
print d

输出结果:
N/A
{'name': 'N/A'}
Daniel
{'name': 'Daniel'}

11、update 可以利用一个字典项更新另一个字典
d = {'name': 'Daniel', 'age': 23, 'sex': 1}
x = {'name': 'biu'}
d.update(x)
print d
d.update(name='biubiu')
print d

提供的字典中的项会被添加到旧的字典中,若有相同的键则会进行覆盖

输出结果:
{'age': 23, 'name': 'biu', 'sex': 1}
{'age': 23, 'name': 'biubiu', 'sex': 1}

12、values和itervalues,values方法以列表的形式返回字典中的值,itervalues返回值的迭代器。与返回键的列表不同的是,返回值的列表中可以包含重复元素
d = {1:1, 2:2, 3:3, 4:1}
print d.values()

输出结果:
[1, 2, 3, 1]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容