Python 字典

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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里。
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]])

     

 



以上是关于Python 字典的主要内容,如果未能解决你的问题,请参考以下文章

Python snippet(代码片段)

Python代码阅读(第26篇):将列表映射成字典

Python代码阅读(第40篇):通过两个列表生成字典

Python代码阅读(第38篇):根据谓词函数和属性字符串构造判断函数

常用python日期日志获取内容循环的代码片段

python 有用的Python代码片段