zoukankan      html  css  js  c++  java
  • 04.Python学习笔记之-字典

    一、Python字典

    字典时 Python中唯一内建的映射类型,字典指定值并没有特殊顺序,都存储在一个特殊的键(key)里,键可以是数字、字符或元组。

    字典是可变类型,可存储任意类型对象。

    1.创建和使用字典

    d = {key1:value1,key2:value2}

    字典由多个键及其对应的值构成的,字典里每个键/值(key/value)对用冒号(:)分割,每个项之间用逗号(,)分割,整个字典包括在花括号中({})。空字典不包含任何项,由两个大括号组成,{} 

    字典示例:

    >>> dict = {'zhangsan': 100 , 'lisi': 99 , 'wangwu': 88}
    >>> dict
    {'zhangsan': 100, 'lisi': 99, 'wangwu': 88}

    二、字典的基本操作及特性

    字典的基本操作在很多方面和序列类似,支持修改、删除等操作。

    1.修改字典

    >>> num = {'a':1,'b':2}
    >>> num
    {'a': 1, 'b': 2}
    >>> num['a']=3
    >>> num
    {'a': 3, 'b': 2}

    2.删除字典元素

    >>> num = {'a':1,'b':2,'c':3}
    >>> num
    {'a': 1, 'b': 2, 'c': 3}
    >>> del num['a']
    >>> num
    {'b': 2, 'c': 3}

    3.删除整个字典

    >>> num = {'a':1,'b':2,'c':3}
    >>> num
    {'a': 1, 'b': 2, 'c': 3}
    >>> del num
    >>> num
    Traceback (most recent call last):
      File "<pyshell#21>", line 1, in <module>
        num
    NameError: name 'num' is not defined

    删除字典后就不能对字典进行访问了,因为执行del操作后字典就不存在了,所以执行会报变量没有定义的错误。

    4.字典的特性

    1.  字典的值可以是任意类型,但是键不行,键必须为不可变类型(数字、字符串、元组)
    2.  同一键不要出现2次,如下例子: a的键出现2次,只有后面的值被记住
    >>> num = {'a':1,'b':2,'c':3,'a':8}
    >>> num
    {'a': 8, 'b': 2, 'c': 3}

    三、字典的函数

    dict函数

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

    语法:

    class dict(**kwarg)
    class dict(mapping, **kwarg)
    class dict(iterable, **kwarg)

    参数说明:

    • **kwargs -- 关键字
    • mapping -- 元素的容器。
    • iterable -- 可迭代对象。

    例子:

    >>> dict()            #创建空字典
    {}
    >>> dict(a=1,b=2,c=3) #传入关键字
    {'a': 1, 'b': 2, 'c': 3}
    >>> dict(zip(['a','b','c'],[1,2,3]))   #映射函数方式来构造字典
    {'a': 1, 'b': 2, 'c': 3}
    >>> dict([('a',1),('b',2),('c',3)])    #可迭代对象方式来构造字典
    {'a': 1, 'b': 2, 'c': 3}

     2.len函数

    len(dict)函数用于计算字典元素的个数,即键的总数:

    例如:

    >>> num = {'a':1,'b':2,'c':3}
    >>> 
    >>> len(num)
    3

    四、字典的格式化字符串

    >>> num = {'张三':1,'李四':2,'王麻子':3}
    >>> print('王麻子的学号是: %(王麻子)s' % num)
    王麻子的学号是: 3
    >>> 

    字典的格式化方式是在每个转换说明符中的 %字符后加上用圆括号括起来的键,在跟上其字典名称

     字典和列表的几个特点:

    字典的特点:

    • 查找和插入的速度极快,不会随着key的增加而变慢。
    • 需要占用大量的内存,内存浪费多。

    列表的特点:

    • 查找和插入时间随着元素的增加而增加。
    • 占用空间小,浪费内存很少。

    五、字典的方法

    1.clear()

    clear()方法用于删除字典内的所有项。

    语法:

    dict.clear()

    >>> num = {'a':1,'b':2}
    >>> num
    {'a': 1, 'b': 2}
    >>> num.clear()
    >>> num
    {}

    2.copy()

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

    语法:

    dict.copy()

    >>> num = {'a':1,'b':2}
    >>> num2 = num.copy()
    >>> num2
    {'a': 1, 'b': 2}
    在业务中有时我们需要复制一个对象,但是又不想对原对象产生副作用,那就不能通过赋值给新变量来解决了(赋值不是拷贝一个对象)。Python专门提供了一种拷贝机制,基于原对象创建一个含有相同值的对象。拷贝有copy模块提供。

    了解浅拷贝和深拷贝:

    >>> x = [1,2]
    >>> y = [3,4]
    >>> z = [x,y]
    >>> a = copy.copy(z)
    >>> a
    [[1, 2], [3, 4]]
    >>> z
    [[1, 2], [3, 4]]
    >>> a[0] is z[0]
    True
    >>> b = copy.deepcopy(z)
    >>> b[0] is z [0]
    False

    浅拷贝拷贝出来的a对象是引用x和y,当修改x或y的值时,a也会改变;
    深拷贝会把里面的元素也重新拷贝一份,拷贝了一份x和y的值相等的两个元素,修改x和y的值,不会对b产生影响。

    3.fromkeys()

    fromkeys()方法用于创建一个新字典,以序列seq中的元素做字典的键,value为字典所有键对应的初始值。

    语法:

    dict.fromkeys(seq[, value])

    • seq -- 字典键值列表。
    • value -- 可选参数, 设置键序列(seq)对应的值,默认为 None。
    >>> seq = ('name','age','sex')
    >>> info = dict.fromkeys(seq)
    >>> info
    {'name': None, 'age': None, 'sex': None}
    >>> info = dict.fromkeys(seq,10)
    >>> info
    {'name': 10, 'age': 10, 'sex': 10}

    4.get()

    get()方法返回指定键的值,如果值不在字典中,就返回默认值。

    语法:

    dict.get(key,default=None)

    >>> student ={'zhangsan':'100','lisi':'50'}
    >>> student.get('zhangsan')
    '100'
    >>> student.get('wangwu',1)
    1
    >>> print(student.get('wangwu'))
    None

    5.key in dict方法

    Python字典in 操作符用于判断键是否存在于字典中,如果键在字典中就返回Ttue ,否则返回False。

    >>> student ={'zhangsan':'100','lisi':'50'}
    >>> 'zhangsan' in student
    True
    >>> 'zhangsan1' in student
    False

    6.items()

    tiems()方法以列表返回可遍历的(键,值)元组数据。

    语法:

    dict.items()

    >>> student ={'zhangsan':'100','lisi':'50'}
    >>> student.items()
    dict_items([('zhangsan', '100'), ('lisi', '50')])

    7.keys()

    keys()方法以列表返回一个字典所有键。

    语法:

    dict.keys()

    >>> student ={'zhangsan':'100','lisi':'50'}
    >>> student.keys()
    dict_keys(['zhangsan', 'lisi'])

    8.setdefault()

    setdefault()方法和get()方法类似,用于获得与给定键相关联的值。如果键不存在与字典中,机会添加键并将值设为默认值。

    语法:

    dict.setdefault(key,default=None)

    >>> student ={'zhangsan':'100','lisi':'50'}
    >>> student.setdefault('zhangsan')
    '100'
    >>> student.setdefault('wangwu',200)
    200
    >>> student
    {'zhangsan': '100', 'lisi': '50', 'wangwu': 200}
    >>> student.setdefault('wangmazi')
    >>> student
    {'zhangsan': '100', 'lisi': '50', 'wangwu': 200, 'wangmazi': None}

    当键不存在时,setdefalut()方法返回默认值并更新字典,默认值如果不设定就是 None,如果设定就是使用设定的值。

    9.update()

    update()方法用于把字典dict2的键/值对更新到dict里。

    语法:

    dict.update(dict2)

    >>> student ={'zhangsan':'100','lisi':'50'}
    >>> student2 = {'xiaoli':80}
    >>> student.update(student2)
    >>> student
    {'zhangsan': '100', 'lisi': '50', 'xiaoli': 80}

    10.values()

    values()方法以列表形式返回字典中所有值,可以使用list()来转换为列表,与返回键的列表不同,返回的列表中可以包含重复的元素。

    语法:

    dict.values()

    >>> student = {'zhangsan':100, 'lisi':60,'wangwu':100}
    >>> print('student 字典所有值为:',list(student.values()))
    student 字典所有值为: [100, 60, 100]
    也许世上本没有幸运二字,只有那些给自己提出严格的要求,并且以高度自律逼自己完成的人,才能得到别人眼里的心想事成。
  • 相关阅读:
    ddd
    对Map按key和value分别排序
    两端通信
    WinDBG调试.NET程序示例
    FAQ:仓储实现为什么在基础设施层?
    Please Send Me a Card
    Web API 入门指南
    Node.js
    聊天工具mychat
    C语言面试问答5
  • 原文地址:https://www.cnblogs.com/shigozsr/p/12901874.html
Copyright © 2011-2022 走看看