访问字典里的值:

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