python 学习笔记之字典分析

访客 阅读:264 2021-03-31 22:39:20 评论:0

一、简介

(1)字典是另一种可变容器模型,且可存储任意类型对象,如其他容器模型。

(2)字典由键和对应值成对组成。字典也被称作关联数组或哈希表。

(3)每个键与值用冒号隔开(:),每对用逗号分割,整体放在花括号中({})。

(4)键必须独一无二,但值则不必。

(5)值可以取任何数据类型,但必须是不可变的,如字符串,数或元组。

二、基本操作

一、创建和使用字典

        字典可以通过下面的方式创建:

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> phonebook = { 'Alice' : '2341''Beth' : '9102''Cecil' : '3258'}  
        字典由多个键及与其对应的值构成的对组成。每个键和它的值之间用冒号(:)隔开,项之间用逗号(,)隔开,而整个字典是由一对大括号括起来。字典中的键是唯一的,而值并不唯一。

        1. dict 函数

        用 dict 函数,通过其他映射(比如其他字典)或者(键,值)这样的序列对建立字典。

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> items = [('name''Gumby'), ('age'42)]  
  2. >>> d = dict(items)  
  3. >>> d  
  4. { 'name''Gumby''age'42}  
        dict 函数也可以通过关键字参数来创建字典。

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> d = dict(name='Gumby', age=42)  
  2. >>> d  
  3. { 'name''Gumby''age'42}  
         2. 基本字典操作

         字典的基本行为在很多方面与序列类似:

        (1)len(d) 返回 d 中项(键-值对)的数量

        (2)d[k] 返回关联到键 k 上的值

        (3)d[k] = v 将值 v 关联到键 k 上

        (4)del d[k] 删除键为 k 的项

        (5)k in d 检查 d 中是否有含有键为 k 的项

          尽管字典和列表有很多特性相同,但也有下面一些重要的区别。

        (1)键类型:字典的键不一定为整型数据(但也可能是),也可能是其他不可变类型,比如浮点型(实型)、字符串或者元组。

        (2)自动添加:即使那个键起初在字典中并不存在,也可以为它分配一个值,这样字典就会建立新的项。

        (3)成员资格:表达式 k in d (d 为字典) 查找的是键,而不是值。

          3. 字典的格式化字符串

          在每个转换(conversion specifier)中的 % 字符后面,可以加上用圆括号括起来的键,后面再跟上其他说明元素。

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> phonebook  
  2. { 'Alice''2341''Beth''9102''Cecil''3258'}  
  3. >>> "Cecil's phone number is %(Cecil)s." % phonebook  
  4. "Cecil's phone number is 3258."  
          只要所有给出的键都能在字典中找到,就可以获得任意数量的转换说明符。

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> template = '''''<html> 
  2. ... <head><title>%(title)s</title></head> 
  3. ... <body> 
  4. ... <h1>%(title)s</h1> 
  5. ... <p>%(text)s</p> 
  6. ... </body>'''  
  7. >>> data = { 'title':'My Home Page''text':'Welcome to my home page!'}  
  8. >>> print(template % data)  
  9. <html>  
  10. <head><title>My Home Page</title></head>  
  11. <body>  
  12. <h1>My Home Page</h1>  
  13. <p>Welcome to my home page!</p>  
  14. </body>  
           4. 字典方法

          (1) clear

            clear 方法清除字典中所有的项。这是个原地操作,所以无返回值(或者说返回 None)。

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> d  
  2. { 'name''Gumby''age'42}  
  3. >>> retured_value = d.clear()  
  4. >>> d  
  5. {}  
  6. >>> retured_value  
  7. >>> print(retured_value)  
  8. None  

          (2) copy

            copy 方法返回一个具有相同键-值对的新字典(这个方法实现的是浅复制(shallow copy),因为值本身就是相同的,而不是副本)。

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> x = { 'username':'admin''machines':['foo''bar''baz']}  
  2. >>> y = x.copy()  
  3. >>> y['username'] = 'mlh'  
  4. >>> y['machines'].remove('bar')  
  5. >>> y  
  6. { 'username''mlh''machines': ['foo''baz']}  
  7. >>> x  
  8. { 'username''admin''machines': ['foo''baz']}  
            上面,当在 y 中替换值的时候,x 不受影响,但是,如果修改了某个值(原地修改,而不是替换),x 也会改变,因为同样的值也存储在原字典中。

            避免这个问题的一种方法就是使用深复制( deep copy),复制其包含所有的值。可以使用 copy 模块的 deepcopy 函数来完成操作。

          (3)fromkeys

            fromkeys 方法使用给定的键建立新的字典,每个键默认对应的值为 None。

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> {}.fromkeys(['name''age'])  
  2. { 'name'None'age'None}  
            也可以直接在所有字典的类型 dict 上面调用方法。

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> dict.fromkeys(['name''age'])  
  2. { 'name'None'age'None}  
            如果不想使用None作为默认值,也可以自己提供默认值。

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> dict.fromkeys(['name''age'], '(unknown)')  
  2. { 'name''(unknown)''age''(unknown)'}  

          (4)get

            当使用 get 访问一个不存在的键时,没有任何异常,而得到了 None 值。

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> print(d['name'])  
  2. Traceback (most recent call last):  
  3.   File "<stdin>", line 1in <module>  
  4. KeyError: 'name'  
  5. >>> print(d.get('name'))  
  6. None  
            还可以定义“默认”值,替换 None:

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> d.get('name''N/A')  
  2. 'N/A'  
            如果键存在,get用起来就像普通的字典查询一样。

          (5)items

            items 方法将所有的字典项以dict_items 方式返回,这些列表项中的每一项都来自于(键,值)。

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> d = { 'title':'Python Web Site''url':'http://www.python.org''spam':0}  
  2. >>> d  
  3. { 'url''http://www.python.org''title''Python Web Site''spam'0}  
  4. >>> d.items()  
  5. dict_items([('url''http://www.python.org'), ('title''Python Web Site'), ('spam'0)])  

          (6)keys

            keys 方法将字典中的键以 dict_keys 形式返回。

          (7)pop 

            pop 方法用来获得对应于给定键的值,然后将这个键-值对从字典中移除。

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> d = { 'x':1'y':2}  
  2. >>> d.pop('x')  
  3. 1  
  4. >>> d  
  5. { 'y'2}  

          (8)popitem

            popitem 弹出随机的项。

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> d  
  2. { 'url''http://www.python.org''title''Python Web Site''spam'0}  
  3. >>> d.popitem()  
  4. ('url''http://www.python.org')  
  5. >>> d  
  6. { 'title''Python Web Site''spam'0}  

          (9)setdefault

            setdefault 方法在某种程度上类似于 get 方法,就是能够获得与给定键相关联的值,除此之外,setdefault 还能在字典中不含有给定键的情况下设定相应的键值。

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> d = {}  
  2. >>> d.setdefault('name''N/A')  
  3. 'N/A'  
  4. >>> d  
  5. { 'name''N/A'}  
  6. >>> d['name'] = 'Gumby'  
  7. >>> d.setdefault('name''N/A')  
  8. 'Gumby'  
  9. >>> d  
  10. { 'name''Gumby'}  
            当键不存在的时候,setdefault 返回默认值并且相应地更新字典。如果键存在,那么就返回与其相应的值,但不改变字典。

          (10)update

            update 方法可以利用一个字典项更新另一个字典。

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> d = { 'title':'Python Web Site''url':'http://www.python.org''changed':'Mar 14 22:09:15 MET 2008'}  
  2. >>> x = { 'title':'Python Language Website'}  
  3. >>> d.update(x)  
  4. >>> d  
  5. { 'url''http://www.python.org''title''Python Language Website''changed':'Mar 14 22:09:15 MET 2008'}  
            提供的字典中的项会被添加到旧的字典中,若有相同的键则会进行覆盖。

          (11)values

            values 方法以 dict_values 的形式返回字典中的值。

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. >>> d = {}  
  2. >>> d[1] = 1  
  3. >>> d[2] = 2  
  4. >>> d[3] = 3  
  5. >>> d[4] = 4  
  6. >>> d.values()  
  7. dict_values([1234])  

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
KIKK导航

KIKK导航

排行榜
关注我们

一个IT知识分享的公众号