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'
>>> 

 

字符串中的转换说明符%后面加上键(用圆括号扩起来),后面在接'%字典名称'。

 

posted @ 2015-05-20 20:53  小刘_php  阅读(87)  评论(0)    收藏  举报