• 【循序渐进学Python】4. Python中的序列——字典


    字典是Python内建的六种序列之一。字典作为一种常用的数据结构,字典中的值没有特定顺序,每个值都对应于一个唯一的键。键可以是数字、字符串甚至是元组。

    1. 创建和使用字典

    Python中字典可以使用下面的语法来直接创建字典对象:

    # ---coding: utf-8 ---
    phonebook = {'1':'','2':'','3':'','4':'','5':''}

    字典由多个键以及对应的值组成,每个键及其对应的值为一项。上面的示例中每个阿拉伯数字(key)对应其中文的数字(value)。

    1.1 使用dict函数

    除了使用上面的语法外,还可以通过dict函数将(key -> value)这样形式的序列转换为字典。

     1 # --- coding: utf-8 ---
     2 items = [('name','Gumby'),('age',42)]
     3 
     4 #使用dict函数
     5 dic = dict(items)
     6 
     7 # 输出:{'age': 42, 'name': 'Gumby'}
     8 print dic
     9 
    10 # 输出:<type 'list'>,类型是一个列表
    11 print type(items)
    12 
    13 # 输出:<type 'dict'> 
    14 print type(dic) 

    1.2 字典的基本操作

    由于字典也是序列的一种,所起它有很多操作(比如len和成员资格)都和序列类似:

    • len(d):返回d(字典对象)中项的数量;
    • d[key]:返回这个key对应的value;
    • d[key] = v:将值v映射到key值为k的项;
    • key in did:检查d中是否包含键为k的项;

    字典和列表虽然都属于Python内建的序列,但是二者有很大的区别

    1.键类型:字典的键只能是不可变类型(比如:整型、字符串、元组、浮点型等)。

    2.自动添加:即使一个键在字典中不存在,也可以为其分配一个值。如下示例:

     1 # --- coding: utf-8 ---
     2 
     3 # 声明一个空列表对象
     4 x = [] 
     5 
     6 # IndexError:list assignment index out of range
     7 # 列表只能够为其索引范围内的元素赋值
     8 x[42] = 'foobar' 
     9 
    10 # 将x的引用变为一个空字典对象
    11 x = {} 
    12 x[42] = 'Foobar'
    13 
    14 # 输出:{42: 'Foobar'}
    15 print x

    3.成员资格:表达式key in dic(dic是一个字典)是根据键来查找,而不是值。因为键是唯一的,而不同键的值却可以相同。如下:

     1 people = {
     2     'Alice':{
     3         'phone':'2341',
     4         'addr':'Foo drive 23'
     5     },
     6 
     7     'Beth':{
     8         'phone':'1213',
     9         'addr':'Baz avenue 90'
    10     },
    11 
    12     'Ceil':{
    13         'phone':'3219',
    14         'addr':'Baz avenue 90'
    15     }
    16 }
    17 
    18 # output: True
    19 print 'Ceil' in people  

    1.3 字典的格式化字符串

    字典还有一个有用的地方就可以用来进行格式化字符串,相对于使用元组来说具备更好的可读性。使用字典来格式化字符串很简单,只需要在转换说明符(%)后面加上一个圆括号,圆括号里面是字典的键,接着后面是其他的说明元素,如下所示:

    1 phonebook = {
    2     'Beth':'1290','Alice':'1239','Ceil':'3258'
    3 }
    4 
    5 #output: Alice's phone number is 1239.
    6 print "Alice's phone number is %(Alice)s." % phonebook

    1.4 字典常用函数

    Python为字典提供了很多的函数,更多可以参考Python文档中dict的API:Dictionaries,下面例举了几个最常用的函数。


    1.4.1 clear

    Clear函数会清除字典中所有的项。

    1 # --- coding: utf-8 ---
    2 
    3 # clear函数
    4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
    5 
    6 print pro_Language # 输出: {'C#': 'microsoft', 'Java': 'Oracle'}
    7 print pro_Language.clear() # 输出:None
    8 print pro_Language # 输出:{}


    1.4.2 copy

    Copy函数会返回一个具有相同key-value对的新字典(浅复制)

    1 # --- coding: utf-8 ---
    2 
    3 # copy函数
    4 pro_Language = {"C#":"microsoft","Java":"Oracle"}  
    5 copy_Pro_Language = pro_Language.copy()
    6 
    7 # 输出: {'C#': 'microsoft', 'Java': 'Oracle'}
    8 print copy_Pro_Language


    1.4.3 fromkeys

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

    1 # --- coding: utf-8 ---
    2 
    3 # fromkeys函数
    4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
    5 
    6 print {}.fromkeys(['C#','Java']) # 输出:{'C#': None, 'Java': None}
    7 print dict.fromkeys(['C#','Java']) # 输出:{'C#': None, 'Java': None}


    1.4.4 get

    get函数可以访问字典中的项,如果不存在,返回一个None(或者自定义一个默认值)

    1 # --- coding: utf-8 ---
    2 
    3 # get函数
    4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
    5 
    6 print pro_Language.get('python') # 输出:None
    7 print pro_Language.get('python','N/A') #输出:N/A


    1.4.5 has_key

    has_key函数可以检测字典中是否含有给出的键。

    1 # --- coding: utf-8 ---
    2 
    3 # has_key函数
    4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
    5 print pro_Language.has_key('python') # 输出:False


    1.4.6 items和iteritems

    items函数将所有的字典项以列表方式返回。iteritems函数作用和items类似,但是会返回一个迭代器对象而不是一个列表

     1 # --- coding: utf-8 ---
     2 
     3 # items/iteritems 函数
     4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
     5 
     6 # 输出:[('C#', 'microsoft'), ('Java', 'Oracle')]
     7 print pro_Language.items() 
     8 
     9 # 输出:<dictionary-itemiterator object at 0x0000000002659BD8>
    10 print pro_Language.iteritems() 


    1.4.7 keys和iterkeys

    keys函数将字段中的键以列表的形式返回,而iterkeys则返回针对键的迭代器

    1 # --- coding: utf-8 ---
    2 
    3 # keys/iterkeys 函数
    4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
    5 
    6 # 输出:['C#', 'Java']
    7 print pro_Language.keys()
    8 # 输出:<dictionary-keyiterator object at 0x0000000002659BD8>
    9 print pro_Language.iterkeys()


    1.4.8 values和itervalues

    values函数将字段中的值以列表的形式返回,而itervalues则返回针对值的迭代器

    1 # --- coding: utf-8 ---
    2 
    3 # values/itervalues 函数
    4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
    5 # 输出:['microsoft', 'Oracle']
    6 print pro_Language.values()
    7 # 输出:<dictionary-valueiterator object at 0x0000000002529BD8>
    8 print pro_Language.itervalues()


    1.4.9 pop

    pop函数用来获得对应给定键的值,然后将这个项(key-value)从字典中删除

    1 # --- coding: utf-8 ---
    2 
    3 # pop 函数
    4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
    5 print pro_Language.pop('C#') # 返回:microsoft
    6 print pro_Language # 输出:{'Java': 'Oracle'}


    1.4.10 popitem

    popitem函数会获取一个随机的项,然后删除。

    1 # --- coding: utf-8 ---
    2 
    3 # popitem 函数
    4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
    5 print pro_Language.popitem() # 返回:('C#', 'microsoft')
    6 print pro_Language # 输出:{'Java': 'Oracle'}


    1.4.11 setdefault

    setdefault函数和set函数类似,但setdefault函数还能在字典中不包含给定键的情况下,设定相应的值。

    1 # --- coding: utf-8 ---
    2 
    3 # setdefault 函数
    4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
    5 pro_Language.setdefault('Python',"N/A")
    6 
    7 # 输出:{'C#': 'microsoft', 'Python': 'N/A', 'Java': 'Oracle'}
    8 print pro_Language


    1.4.12 update

    update函数可以利用一个字典对象更新另一个字典对象,提供字典中的项会添加到旧的字典中,如果有相同的键则会覆盖

     1 # --- coding: utf-8 ---
     2 
     3 # update
     4 pro_Language = {"C#":"microsoft","Java":"Oracle"}
     5 script_Language = {'Java':'Sun','python':'Python Software Foundation'}
     6 
     7 pro_Language.update(script_Language)
     8 
     9 # 输出:{'C#': 'microsoft', 'python': 'Python Software Foundation', 'Java': 'Sun'}
    10 print pro_Language

    参考资料&进一步阅读

    《Python基础教程》

    Learn Python The Hard Way, 2nd Edition

    http://www.pythondoc.com/pythontutorial27/index.html

  • 相关阅读:
    oracle 监听静态注册举例解析
    oracle监听动态注册与静态注册
    oracle startup mount nomount 区别
    RAC的时间同步问题
    RAC环境TNS-12541报错处理
    Oracle参数修改是否需要重启等
    面试提纲
    Dubbo是什么
    为什么要用dubbo,dubbo和zookeeper关系
    Java的参数传递是「按值传递」还是「按引用传递」?
  • 原文地址:https://www.cnblogs.com/IPrograming/p/Python_dict.html
Copyright © 2020-2023  润新知