Python 字典
访问字典里的值:
>>>dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}; >>>print "dict['Name']: ", dict['Name']; dict['Name']: Zara >>>print "dict['Age']: ", dict['Age']; dict['Age']: 7
如果用字典里没有的键访问数据,会输出错误。
添加、修改、删除字典:
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}; dict['Age'] = 8; # update existing entry dict['School'] = "DPS School"; # Add new entry print "dict['Age']: ", dict['Age']; print "dict['School']: ", dict['School']; del dict['Name']; # 删除键是'Name'的条目 dict.clear(); # 清空词典所有条目 del dict ; # 删除词典 print "dict['Age']: ", dict['Age'];
结果:
dict['Age']: 8 dict['School']: DPS School dict['Age']: Traceback (most recent call last): File "test.py", line 8, in <module> print "dict['Age']: ", dict['Age']; TypeError: 'type' object is unsubscriptable
字典特性:
字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。
两个重要的点需要记住:
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住。
2)键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行。
字典常用函数:
函 数 | 说 明 |
dict.clear()
|
删除字典内所有元素。(无返回值) |
dict.copy() |
返回一个字典的浅复制。 |
dict.fromkeys(seq[, value])) |
用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值。 |
dict.get(key, default=None)
|
返回指定键的值,如果值不在字典中返回默认值。 |
dict.has_key(key)
|
用于判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false。 |
dict.items()
|
以列表返回可遍历的(键, 值) 元组数组。 |
dict.keys()
|
以列表返回一个字典所有的键。 |
dict.setdefault(key, default=None)
|
和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default。 |
dict.update(dict2)
|
把字典dict2的键/值对更新到dict里。(同key,dict2覆盖dict) |
dict.values()
|
以列表返回字典中的所有值。 |
pop(key[,default])
|
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 |
popitem()
|
随机返回并删除字典中的一对键和值。如果字典已经为空,却调用了此方法,就报出KeyError异常。 |
dict.fromkeys(seq[, value])):
>>>seq = ('name', 'age', 'sex') >>>dict = dict.fromkeys(seq) >>>dict {'age': None, 'name': None, 'sex': None} >>>dict = dict.fromkeys(seq, 10) >>>dict {'age': 10, 'name': 10, 'sex': 10}
dict.get(key, default=None):
>>>dict = {'Name': 'Zara', 'Age': 27} >>>print "Value : %s" % dict.get('Age') Value : 27 >>>print "Value : %s" % dict.get('Sex', "Never") Value : Never
dict.items():
dict = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'} print "字典值 : %s" % dict.items() # 遍历字典列表 for key,values in dict.items(): print key,values
结果:
字典值 : [('Google', 'www.google.com'), ('taobao', 'www.taobao.com'), ('Runoob', 'www.runoob.com')] Google www.google.com taobao www.taobao.com Runoob www.runoob.com
字典值可以是任意数值类型:
>>> dict1 = {"a":[1,2]} # 值为列表 >>> print dict1["a"][1] 2 >>> dict2 = {"a":{"c":"d"}} # 值为字典 >>> print dict2["a"]["c"] d
Python 直接赋值、浅拷贝和深度拷贝解析:
-
直接赋值:其实就是对象的引用(别名)。b = a: 赋值引用,a 和 b 都指向同一个对象。
-
浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
-
深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷贝 d = copy.deepcopy(a) #对象拷贝,深拷贝 a.append(5) #修改对象a a[4].append('c') #修改对象a中的['a', 'b']数组对象 print( 'a = ', a ) print( 'b = ', b ) print( 'c = ', c ) print( 'd = ', d )
结果:
('a = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5]) ('b = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5]) ('c = ', [1, 2, 3, 4, ['a', 'b', 'c']]) ('d = ', [1, 2, 3, 4, ['a', 'b']])