python 字典
列表适合将值组织到一个结构中,并且通过编号对其进行引用。
而字典通过名字引用值,值并没有特殊的顺序,都是存储在一个特定的键下。
字典由多个键及与其对应的值构成的键值对组成
dict函数
>>> items = [('name','zhangsan'), ('age', 42)] >>> dict(items) {'age': 42, 'name': 'zhangsan'} >>>
>>> d = dict(name='zhangsan', age=42) >>> d {'age': 42, 'name': 'zhangsan'}
基本操作
len(dic) 求字典项数量
d[k] 返回关联到键k上的值
d[k] = v
del d[k]
k in d
python的字典与列表的区别
字典的键不一定是整型,还可以是浮点型、字符串、元组
即使键不存在,也可以为字典赋值,这样字典会建立新的项
而列表不能将值关联到列表范围之外的索引上,除非使用append或其他的类似操作
查找:k in d 查找的是键而不是值, v in l用来查找值,而不是索引
字典方法
1.clear 清楚字典中所有的项
2.copy 返回一个具有相同键值对的新字典
这里有一个深复制,浅复制的概念,js中有引用和复制的概念(数组,对象,函数是引用赋值,数字,字符串,布尔是复制)
>>> x = {'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
>>> y = x.copy()
>>> y
{'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
>>> y['username'] = 'mlh'
>>> y['machines'].remove('bar')
>>> x
{'username': 'admin', 'machines': ['foo', 'baz']}
>>> y
{'username': 'mlh', 'machines': ['foo', 'baz']}
>>>
当修改y中的machines列表时,x字典中的machines列表也修改了,这是浅复制
为了使原字典不受影响,应该使用深复制
>>> from copy import deepcopy >>> x = {'username': 'admin', 'machines': ['foo', 'bar', 'baz']} >>> y = deepcopy(x) >>> y['username'] = 'mlh' >>> y['machines'].remove('bar') >>> x {'username': 'admin', 'machines': ['foo', 'bar', 'baz']} >>> y {'username': 'mlh', 'machines': ['foo', 'baz']} >>>
3.fromkeys
使用给定的键建立新的字典
dict是所有字典的类型
>>> {}.fromkeys(['name','age'])
{'age': None, 'name': None}
>>> dict.fromkeys(['name','age'])
{'age': None, 'name': None}
>>>
提供默认值
>>> {}.fromkeys(['name','age'], 'default')
{'age': 'default', 'name': 'default'}
>>>
4.get访问字典的方式
>>> name = {'php': 'echo', 'js': 'alert', 'python': 'print'}
>>> name['phpp']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'phpp'
>>> name.get('phpp')
>>> name.get('phpp', 'can not find')
'can not find'
>>>
如果访问字典中不存在的键时会报错,而get访问不存在的键没有任何异常
get还可以设默认值
5.has_key
d.has_key(k) 相当于表达式 k in d
python 3.0不含这个函数
6.items 和 iteritems
items方法将字典所有项以列表方式返回
>>> name.iteritems(); <dictionary-itemiterator object at 0x7fb876bca9f0> >>> >>> name {'python': 'print', 'php': 'echo', 'js': 'alert'} >>> name.items() [('python', 'print'), ('php', 'echo'), ('js', 'alert')]
而dict能将items返回的值转为对象
z = dict(z.items())
7.keys 和 iterkeys
将字典中的键以列表形式返回
>>> name.keys() ['python', 'php', 'js'] >>>
{'a': 'A', 'b': 'B'}
>>> z.keys()
['a', 'b']
8.popitem
类似list.pop,列表的pop会弹出最后一个元素。但是,popitem弹出随机的项,因为字典并没有‘最后的元素’或者其他有关顺序的概念。
若想一个一个地移除并处理项,这个方法很奏效。(因为不用首先获取键的列表)
>>> z {'a': 'A', 'b': 'B'} >>> z.popitem() ('a', 'A') >>> z {'b': 'B'} >>> z.popitem() ('b', 'B') >>> z {} >>>
字典的append方法是没有意义的
9.setdefault
类似于get
>>> d = {} >>> d.setdefault('name') >>> d {'name': None} >>>
获取与给定键相关联的值
如果键不存在,则返回none,而且更新字典,于给定键关联的值为none,而get则不会这么做,get只返回默认值,不会像setdefault更新默认值
如果键存在,直接返回键值
10.update
可以利用一个字典项更新另外一个字典,若有相同的键,则会进行覆盖。
>>> d = {'a': 'A', 'b': 'B', 'c': 'C'}
>>> e = {'a': 'D'}
>>> d.update(e)
>>> d
{'a': 'D', 'c': 'C', 'b': 'B'}
11.values
返回字典中的值,于返回键的列表(keys)不同的是,返回的值可以重复。
{'a': 'D', 'c': 'C', 'b': 'B', 'f': 'D'}
>>> d.values();
['D', 'C', 'B', 'D']
python 唯一内建的映射是字典
利用字典格式化字符串
>>> d {'a': 'D', 'c': 'C', 'b': 'B', 'z': 123, 'f': 'D'} >>> 'hello %(z).2f'%d 'hello 123.00' >>> 'hello %(z)f'%d 'hello 123.000000' >>> 'hello %(z)c'%d 'hello {' >>> 'hello %(z)d'%d 'hello 123' >>>
字符串中的转换说明符%后面加上键(用圆括号扩起来),后面在接'%字典名称'。

浙公网安备 33010602011771号