python字典总结

来源:互联网 发布:环保产业发展现状数据 编辑:程序博客网 时间:2024/05/23 12:56
字典使用{}括号,字典中的键值是唯一值,例如
a={1:'a',2:'b',3:'c'}
可以使用dict函数对序列建立字典:
>>> a=[(1,2),('a','b')]
>>> b=dict(a)
>>> b
{'a': 'b', 1: 2}
>>> b=dict(a='b',age='2')
>>> b
{'a': 'b', 'age': '2'}
>>> b=dict
>>> b
<type 'dict'>
>>> b=dict()
>>> b
{}
一.字典基本操作
len返回字典的长度
d[k]返回键值k对应的值,如果k不存在,返回一个异常KeyError:
d[k]=v将v的值赋给k,如果k的值不存在则会新建一个键
del d[k]删除键k
k in d检查键k是否在字典中

二.字典的格式化输出
字典的格式化除了使用类似于字符串的格式化方式外还可以:
在转换说明符%后面加上键值并用圆括号括起来,后面再跟上其它说明:
>>> b={'1':'a'}
>>> print 'the first number in b is :%(1)s' % b
the first number in b is :a
三.字典方法
1.clear
clear方法清除字典中的所有的项
>>> b
{'1': 'a', '3': 'c', '2': 'b'}
>>> b.clear()
>>> b
{}
注意下面的情况:
>>> b={'1': 'a', '2': 'b'}
>>> a=b
>>> a
{'1': 'a', '2': 'b'}
>>> b={}
>>> b
{}
>>> a
{'1': 'a', '2': 'b'}
这种情况下a的字典并没有清空,所以需要使用clear来清空,
2.copy
copy方法返回一个具有相同键值的新字典,这个方法是浅复制,因为值的本身是相同的,而不是副本,即这个字典的键对应的值和原来的字典是相同的,而不是副本
例如一个字典的值是一个列表,通过列表的remove删除列表的值后,复制后的字典也会删除
>>> b={'1':'a','2':['x','y','z']}
>>> b
{'1': 'a', '2': ['x', 'y', 'z']}
>>> a=b.copy()
>>> a
{'1': 'a', '2': ['x', 'y', 'z']}
>>> b['2'].remove('x')
>>> b
{'1': 'a', '2': ['y', 'z']}
>>> a
{'1': 'a', '2': ['y', 'z']}
避免这个问题是使用深复制,复制其包含的值,使用copy模块的deepcopy函数来完成
>>> b
{'1': 'a', '2': ['y', 'z']}
>>> a=copy.deepcopy(b)
>>> a
{'1': 'a', '2': ['y', 'z']}
>>> a['2'].remove('y')
>>> a
{'1': 'a', '2': ['z']}
>>> b
{'1': 'a', '2': ['y', 'z']}
3.fromkeys
fromkeys方法使用给定的键建立新的字典,每个键对应一个默认的值None
>>> dict.fromkeys('name','age')
{'a': 'age', 'e': 'age', 'm': 'age', 'n': 'age'}
>>> dict.fromkeys(['name','age'])
{'age': None, 'name': None}
>>> dict.fromkeys(['a','b','c'],[x for x in range(3)])
{'a': [0, 1, 2], 'c': [0, 1, 2], 'b': [0, 1, 2]}
4.get
get方法是一个更宽松的访问字典的方法,默认当访问的字典键不存在的时候不会报错,会返回一个None值
可以自定义修改当get不存在一个键的时候的返回值
>>> b
{'a': [0, 1, 2], 'c': [0, 1, 2], 'b': [0, 1, 2]}
>>> b['d']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'd'
>>> b.get('d')
>>> b.get('d','NOT EXIST')
'NOT EXIST'
5.has_key
has_key方法检查字典中是否含有特定的键,这个和k in d一样,python3.0不包含这个函数
>>> b
{'a': [0, 1, 2], 'c': [0, 1, 2], 'b': [0, 1, 2]}
>>> b.has_key('a')
True
>>> if b.has_key('a'):
... print 'yes'
... else:
... print 'no'
...
yes
>>>
>>> if 'a' in b:
... print 'yes'
... else:
... print 'no'
...
yes
>>>
6.items和iteritems
items方法将字典所有项以列表返回,感觉像是dict的逆过程
>>> a=[('1','a'),('2','b')]
>>> b=dict(a)
>>> b
{'1': 'a', '2': 'b'}
>>> c=b.items()
>>> c
[('1', 'a'), ('2', 'b')]
iteritems方法大致相同,但是返回的是一个迭代器对象,在很多情况下iteritems会更加高效,特别是需要迭代的时候
>>> b
{'1': 'a', '2': 'b'}
>>> c=b.iteritems()
>>> c
<dictionary-itemiterator object at 0x026097B0>
7.keys和iterkeys
keys方法将字典中的键以列表的方式返回,而iterkeys以迭代器的方法返回
>>> b
{'1': 'a', '2': 'b'}
>>> c=b.keys()
>>> c
['1', '2']
>>> c=b.iterkeys()
>>> c
<dictionary-keyiterator object at 0x02609750>
8.value和itervalues
values方法以列表的方式返回字典中的值,itervalues返回一个迭代器,与返回键的不同的是,返回值可能存在重复的元素
>>> b
{'1': 'a', '3': 'c', '2': 'b', '4': 'x'}
>>> b.values()
['a', 'c', 'b', 'x']
9.pop
pop方法用来获取给定的键的值,然后将这个键值从字典中删除
这个不像列表,默认不写值会弹出最后一个项,必须写上键
>>> b
{'1': 'a', '2': 'b'}
>>> b.pop()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pop expected at least 1 arguments, got 0
>>> b.pop('1')
'a'
>>> b
{'2': 'b'}
10.popitem
popitem类似于list.pop,不同的是popitem弹出的是随机键,直到全部弹完为止,如果想一个接一个的处理项目,用popitem很适合!
>>> b
{'1': 'a', '3': 'c', '2': 'b', '4': 'd'}
>>> b.popitem()
('1', 'a')
>>> b
{'3': 'c', '2': 'b', '4': 'd'}
>>> b.popitem()
('3', 'c')
>>> b
{'2': 'b', '4': 'd'}
>>> b.popitem()
('2', 'b')
>>> b
{'4': 'd'}
>>> b.popitem()
('4', 'd')
>>> b
{}
>>> b.popitem()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'popitem(): dictionary is empty'
>>>
11.setdefault
setdefault方法类似于get方法,能够获得给定键的值,除此之外,如果如果字典中的键的值不存在,那么可以设置
>>> d={}
>>> d.setdefault('name','N/A')
'N/A'
>>> d
{'name': 'N/A'}
>>> d['name']='bob'
>>> d
{'name': 'bob'}
>>> d.setdefault('name','N/A')
'bob'
>>> d
{'name': 'bob'}
>>>
12.update
update方法可以利用一个字典项更新另外一个字典
>>> b
{'1': 'a', '3': 'c', '2': 'b', '4': 'd'}
>>> a
{'4': 'x'}
>>> b.update(a)
>>> b
{'1': 'a', '3': 'c', '2': 'b', '4': 'x'}















0 0
原创粉丝点击