zoukankan      html  css  js  c++  java
  • Python字典

    1. 字典

      d = {"name":"zhangsan", "age":18}

      dict的键必须是唯一的,但值则不必,键必须是不可边的,如字符串,数组或元祖。

    2. dict函数

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

    items=[('name',"John"), ("age", 42)]
    d=dict(items)
    print("d:",d)
    print(d["name"])
    
    d1=dict(name="John", age=42)
    print("d1:",d1)
    print(d1["name"])
    
    >>> d: {'name': 'John', 'age': 42}
    >>> John
    >>> d1: {'name': 'John', 'age': 42}
    >>> John

    3. 基本字典操作

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

      len(d)

      d[key]

      d[key] = value

      del d[key]

      key in d

    people = {
        "zhangsan":{"age":18, "phone":"2341"},
        "lisi":{"age":30, "phone":"8888"}
    }
    
    name = input("Name:")
    request = input("age(a) or phone(h)?")
    if request == "a":
        key = "age"
    elif request == "p":
        key = "phone"
        
    if name in people:
        print ("%s's %s is %s" %(name,key,people[name][key]))

    注:在Python3中已经将raw_input和input整合成了input,去除了raw_input()函数,其接受任意输入, 将所有输入默认为字符串处理,并返回字符串类型

    4. 字典的格式化字符串

      在前面Python字符串博客中已经介绍了python字符串,下面我们看看格式化在字典中的应用:

    template = '''
        <head><title>%(title)s</title></head>
        <body>
            <h1>%(title)s</h1>
            <p>%(text)s</p>
        </body>
    '''
    
    data = {"title":"my web", "text":"welcome to my home page"}
    print(template %(data))

    5. 字典方法

    (1)clear 清除字典中所有的项

    (2)copy 

       说到拷贝一定离不开浅拷贝和深拷贝的话题,下面通过例子进行说明

      例1

    d = {"name":"zhangsan", "info":{"age":16, "sex":"man"}}
    d1 = d
    d2 = d.copy()
    
    print("d's ID:%d" %(id(d)))
    print("d1's ID:%d" %(id(d1)))
    print("d2's ID:%d" %(id(d2)))

     可以看出d和d1的地址相同,d2的地址不同

      例2

    d = {"name":"zhangsan", "info":{"age":16, "sex":"man"}}
    d1 = d
    d2 = d.copy()
    
    d2["name"] = "lisi"
    print("d:", d)
    print("d2:", d2)
    
    d2["info"]["age"] = 88
    print("d:", d)
    print("d2:", d2)

    修改以后,name不同,age相同,这就是浅拷贝的最好说明

    解决浅拷贝的最好方法就是深拷贝,Python中提供了copy模块中的deepcopy

      例3

    d = {"name":"zhangsan", "info":{"age":16, "sex":"man"}}
    from copy import deepcopy
    d2 = deepcopy(d)
    
    d2["name"] = "lisi"
    print("d:", d)
    print("d2:", d2)
    
    d2["info"]["age"] = 88
    print("d:", d)
    print("d2:", d2)

    (3)fromkeys

      使用给定的键建立新的字典,每个键都对应一个默认的值None

    d = {}.fromkeys(["name", "age"])
    print(d)
    
    d1 = dict.fromkeys(["name", "age"])
    print(d1)
    
    d2 = dict.fromkeys(["name", "age"], ("undefine"))
    print(d2)

      注:无法给“name”,"age"不同的默认值

    (4)get

      get函数是我觉得相当重要又很有意思的一个函数,有意思就在于它在访问一个不存在的键时,没有任何异常,而得到None值,还可以自定义“默认值”,替换None

    d ={"name":"zhangsan", "age":18}
    print(d.get("sex","man"))

    >>> man

    (5)has_key 检查字典中是否含有某个特定的键

    (6)items

      items将字典中的所有的项一列表方式返回,注意,返回时没有遵循特定的顺序

    d ={"name":"zhangsan", "age":18, "sex":"man"}
    
    print(d.items())
    
    >>> [('name', 'zhangsan'), ('age', 18), ('sex', 'man')]

    (7)keys

      同上,将字典中的键值以列表的方式返回

    (8)pop

      pop方法获得对应键的值,然后将这个键-值从字典中移除

    (9)popitem

      随机的一个一个地移除项,我觉得用处不大

    (10)setdefault

      setdefault方法在某种程度上类似于get方法

      为指定的键设置值,若键存在返回键所对应的值,若键不存在,返回设置的值,并更新字典

    d ={"name":"zhangsan", "age":18, "sex":"man"}
    
    print (d.setdefault("name", "lisi"))
    print(d)
    
    print(d.setdefault("addr", "wuhan"))
    print(d)

    (11)update

      可以利用一个字典项更新另一个字典项

  • 相关阅读:
    汇编之EBP的认识。
    【转】PE详解
    迟到的,2016年终总结
    Java 反射
    Java 集合与容器类
    Java 类加载与实例化
    Java 类与对象
    Java 值传递与对象拷贝
    Java 面向对象
    二叉树
  • 原文地址:https://www.cnblogs.com/xiaobingqianrui/p/8287816.html
Copyright © 2011-2022 走看看