zoukankan      html  css  js  c++  java
  • Python中的Dictionary

    Dictionary的创建

    1 字面量

    >>>D = {'a': 1, 'b': 2}
    >>>D
    {'b': 2, 'a': 1}

    2 keyword参数

    >>>D = dict(a = 1, b = 2)
    >>>D
    {'a': 1, 'b': 2}

    3 key/value tuples

    >>>D = dict([('a', 1), ('b, 2)]
    >>>D
    {'a': 1, 'b': 2}

    4 dictionary comprehension表达式,但是只在Python 2.7和Python 3.X中支持

    >>>D = {x : x **2 for x in [1, 2, 3]}
    >>>D
    {1: 1, 2: 4, 3: 9}

    字典的key是否只能为字符串

    不是,字典的keys可以是任何对象,比如,可以是整数,可以是tuple等等

    字典在Python 3.X和Python 2.7中的变化

    1 Python 3.X中的变化

    1) Python 3.X中支持comprehension表达式;

    2) Python 3.X中dict.keys,dict.values,dict.items返回dict对象的视图,在Python 2.X中,它们返回的是一个list对象。视图对象是一个iterable对象,它主要有三个特点:第一,视图对象不是list,所以list方法对视图对象无法直接使用;第二,视图对象动态跟踪字典的变化;第三,对于dict.keys来说,返回的视图对象是一个set-like对象,因此可以使用set的方法来进行操作,但是,dict.values返回的不是一个set-like的对象,因此无法使用set的方法来操作,dict.items当且仅当包含唯一的<key, value>对,并且只包含不可变对象,那么它也是set-like的:

    >>>D = dict(a = 1, b = 2, c = 3)
    >>>D
    {'a': 1, 'b': 2, 'c': 3}
    
    
    >>>D.keys()
    dict_keys(['a', 'b', 'c'])
    
    >>>D.values()
    dict_values([1, 2, 3])
    
    >>>D.items()
    dict_items([('a', 1), ('b', 2), ('c', 3)])
    
    
    # 动态跟踪反映字典的内容
    >>>del D['b']
    >>>D
    {'a': 1, 'c': 3}
    
    >>>D.keys()
    dict_keys(['a', 'c'])
    
    >>>D.values()
    dict_values([1, 3])
    
    >>>D.items()
    dict_items([('a', 1), ('c', 3)])
    
    
    >>>D.keys() & D.keys()   # keys支持set操作
    {'a', 'c'}
    
    >>>D.values() & D.values()  # 报错
    TypeError:unsupported operand type(s) for &:'dict_values' and 'dict_values'
    
    >>>D.items() & D.items()   # 满足items是set-like的条件
    {('a', 1), ('c', 3)}

    3) 字典之间不再支持直接的大小比较,但是==还是支持的;

    >>>A = dict(a = 1, b = 2)
    >>>B = dict(c = 3, d = 4)
    >>>A < B     # 报错
    TypeError:unorderalble types:dict() < dict()
    
    
    >>>A == B
    False
    
    >>>sorted(A.items()) < sorted(B.items())  # 替代直接比较
    True

    4) has_key方法已经不存在了,这是Python 2.X里面的方法,取而代之的是in方法(Python 2.X中也支持in方法)。

    2 Python 2.7中的变化

    支持comprehension表达式;

    支持keys,values,items的视图对象,但是使用dict.viewKeys,dict.viewValues,dict.viewItems方法

  • 相关阅读:
    结构化程序的三种基本逻辑结构
    总结程序设计几大原则
    [转]AutoResetEvent 与 ManualResetEvent区别
    ASP.NET高并发解决方案
    关于SQL SERVER高并发解决方案
    【转】sql server开启全文索引方法
    SQL Server技术问题之自定义函数优缺点
    SQL Server技术问题之视图优缺点
    SQL Server技术问题之触发器优缺点
    SQL Server技术问题之索引优缺点
  • 原文地址:https://www.cnblogs.com/chaoguo1234/p/9163613.html
Copyright © 2011-2022 走看看