本文共 4506 字,大约阅读时间需要 15 分钟。
字典由键及其相应的值组成,这种键值对称为项(item)。
键和值之间用冒号(:)分隔,项之间用逗号分隔,整个字典放在花括号内 people = {‘name’:‘Sudley’,‘age’:99} 在字典(以及其他映射类型)中,键必须是独一无二的。>>> items = [('name','Sudley'),('age',99)]>>> d = dict(items)>>> d{ 'name': 'Sudley', 'age': 99}>>> d2 = dict(name='Sudley',age=99)>>> d2{ 'name': 'Sudley', 'age': 99}>>>
>>> lst1 = ['name','age']>>> lst2 = ['Sudley',99]>>> d = dict(zip(lst1,lst2))>>> d{ 'name': 'Sudley', 'age': 99}>>>
字典和列表的主要区别
对比项 | 字典 | 列表 |
---|---|---|
键VS索引 | 键可以是任何不可变的类型,如整数、浮点数(实数)、字符串或元组 | 索引是整数 |
自动添加 | 对原来没有的键赋值会新建一个项 | 无法直接对不存在的索引赋值,需要借助append等方法新增元素 |
成员资格(k in d) | 查找的是键而非值 | 查找的是值而非索引 |
方法 | 描述 |
---|---|
d.clear() | 删除d的所有项 |
d.copy() | 返回d的副本,执行的是浅复制 |
d.fromkeys(seq[, val]) | 返回一个字典,其中的键来自seq,而值都被设置为val(默认为None)。可直接使用字典类型dict将其作为类的方法来调用 |
d.get(key[, default]) | 若d[key]存在,就返回它的值;否则返回指定的默认值(默认为None) |
d.items() | 返回一个包含d各项(key,value)对的迭代器(视图) |
d.iterkeys() | 返回一个可用于对d的键进行迭代的迭代对象 |
d.keys() | 返回一个包含所有键的迭代器(视图) |
d.pop(key[, d]) | 删除并返回对应键的值,若键不存在且设置了d则返回给定默认值d,若键不存在也没设置d则引发KeyError异常 |
d.popitem() | 随机删除一个项,并以(key,value)对的方式返回 |
d.setdefault(key[, default]) | 如果d[key]存在,就返回它的值;否则返回指定的默认值(默认为None),并将d[key]设置为指定的默认值 |
d.update(other) | 将other中的每项都添加到d(可能覆盖既有的项)。也可以像调用字典构造函数那样指定类似的参数 |
d.value() | 返回一个迭代器(视图),其中包含d中所有的值(可能有重复的) |
方法举例
1.clear>>> x = { 'key':'value'}>>> y = x>>> y{ 'key': 'value'}>>> x = { }>>> y{ 'key': 'value'}>>> x = { 'key':'value'}>>> y = x>>> y{ 'key': 'value'}>>> x.clear() #注意这里没有返回值,或者说返回None>>> y{ }>>>
2.copy
执行的是浅复制,当替换副本中的值时,原件不受影响。如果修改副本中的值(就地修改而不是替换),原件也将发生改变。 浅复制相关概念可参考>>> x = { 'username':'admin','machines':['foo','bar','baz']}>>> y = x.copy()>>> y['username'] = 'root'>>> y['machines'].remove('bar')>>> y{ 'username': 'root', 'machines': ['foo', 'baz']}>>> x{ 'username': 'admin', 'machines': ['foo', 'baz']}>>> y['machines'][0] = 'bar'>>> y{ 'username': 'root', 'machines': ['bar', 'baz']}>>> x{ 'username': 'admin', 'machines': ['bar', 'baz']}>>> y['machines'] = 'bar'>>> y{ 'username': 'root', 'machines': 'bar'}>>> x{ 'username': 'admin', 'machines': ['bar', 'baz']}>>>
为了避免上述的问题可以执行深复制,即同时复制值及其包含的所有值,等等。
>>> from copy import deepcopy>>> x = { 'username':'admin','machines':['foo','bar','baz']}>>> y = deepcopy(x)>>> y['machines'].remove('bar')>>> y{ 'username': 'admin', 'machines': ['foo', 'baz']}>>> x{ 'username': 'admin', 'machines': ['foo', 'bar', 'baz']}>>>
3.fromkeys
>>> dict.fromkeys(['name','age']){ 'name': None, 'age': None}>>> dict.fromkeys(['name','age'],'NA'){ 'name': 'NA', 'age': 'NA'}>>>
4.get
>>> d = { }>>> d['name']Traceback (most recent call last): File "", line 1, in d['name']KeyError: 'name'>>> d.get('name')>>> d{ }>>>
5.setdefault
>>> d = { }>>> d.setdefault('name')>>> d{ 'name': None}>>> d.setdefault('age','NA')'NA'>>> d{ 'name': None, 'age': 'NA'}>>>
6.items
>>> x = { 'username':'admin','machines':['foo','bar','baz']}>>> x.items()dict_items([('username', 'admin'), ('machines', ['foo', 'bar', 'baz'])])>>> y = x.items()>>> y[0]Traceback (most recent call last): File "", line 1, in y[0]TypeError: 'dict_items' object is not subscriptable>>> print(y)dict_items([('username', 'admin'), ('machines', ['foo', 'bar', 'baz'])])>>> for i in y: #返回值y属于一种名为字典视图的特殊类型,可用于迭代但是不能索引 print(i) ('username', 'admin')('machines', ['foo', 'bar', 'baz'])>>>
7.keys
和上面一样可以迭代不能索引,字典是无序的。>>> x = { 'username':'admin','machines':['foo','bar','baz']}>>> x.keys()dict_keys(['username', 'machines'])>>>
8.pop
>>> x = { 'username':'admin','machines':['foo','bar','baz'],'ip':'xx'}>>> x.pop() #必须带键值Traceback (most recent call last): File "", line 1, in x.pop()TypeError: pop expected at least 1 arguments, got 0>>> x.pop('ip')'xx'>>> x.pop('ip')Traceback (most recent call last): File " ", line 1, in x.pop('ip')KeyError: 'ip'>>> x.pop('ip','ip?')'ip?'>>>
9.popitems
>>> x = { 'username':'admin','machines':['foo','bar','baz'],'ip':'xx'}>>> x.popitem() #随机弹出一个项('ip', 'xx')>>> x.popitem()('machines', ['foo', 'bar', 'baz'])>>>
10.update
>>> d = { 'username':'root', 'ip':'192.168.1.1', 'tty':'1'}>>> x = { 'username':'guest','tty':'2'}>>> d.update(x)>>> d{ 'username': 'guest', 'ip': '192.168.1.1', 'tty': '2'}>>> y = { 'username':'guest','http':'2'}>>> d.update(y)>>> d{ 'username': 'guest', 'ip': '192.168.1.1', 'tty': '2', 'http': '2'}>>>
转载地址:http://ouiti.baihongyu.com/