Python快速学习第三天

    xiaoxiao2024-11-19  4

    第三天:

    字典

    什么是字典?

    字典是Python语言中唯一的映射类型。

    映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表。

    字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型。

    字典类型与序列类型的区别:

    1.存取和访问数据的方式不同。 2.序列类型只用数字类型的键(从序列的开始按数值顺序索引); 3.映射类型可以用其他对象类型作键(如:数字、字符串、元祖,一般用字符串作键),和序列类型的键不同,映射类型的键直4.接或间接地和存储数据值相关联。 5.映射类型中的数据是无序排列的。这和序列类型是不一样的,序列类型是以数值序排列的。 6.映射类型用键直接“映射”到值。

     

     

    字典的创建

    字典的基本形态dic={key1:value1, key2:value2...}

          创建方式1:直接型。

     

    >>>dict1={}

    >>>dict2={'name':'tanggao','age':20}

     

    创建方式2:使用工厂方法dict,通过其他映射(例如字典)或者(键,值)这样的序列对建立

     

    >>>items=[('name','tanggao'),('age',20)]

    >>>dict2=dict(items)

    >>>dict1=doct([('name','tanggao'),('age',20)])

     

        创建方式3:使用内建方法fromkeys()创建’默认‘字典,字典中元素具有相同的value(如果没有给出,默认为none)

     

    >>>dict1={}.fromkeys(('x','y'))

    >>> dict1

    {'y': None, 'x':None}

    >>>dict2={}.fromkeys(('x','y'),-1)

    >>> dict2

    {'y': -1, 'x': -1}

    >>>dict3=dict.fromkeys('x','y')

    >>> dict3

    {'x': 'y'}

    >>>dict3=dict.fromkeys(('x','y'))

    >>> dict3

    {'y': None, 'x':None}

    >>> 

     

    字典的基本操作

          Len(d)返回d中 键值对的数量

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

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

       deld[k]删除键为k的项

       kin d检查d 中是否含有键为k的项

     

    >>>dict1={'x':1,'y':2}

    >>>dict1

    {'y':2, 'x': 1}

    >>>dict1['z']=3

    >>>dict1

    {'y':2, 'x': 1, 'z': 3}

    >>>dict1['z']=4

    >>>dict1

    {'y':2, 'x': 1, 'z': 4}

    >>>del dict1['z']

    >>>dict1

    {'y':2, 'x': 1}

    >>>'x' in dict1

    True

    >>> 

     

    字典的格式化字符串

     

    >>>name= {'Tanggao':20,'ZhousiYuan':19}

    >>>"Tanggao 's age is %(tanggao)s." % name

    >>>"Tanggao 's age is %(Tanggao)s." % name

    "Tanggao's age is 20."

    >>> 

     

    字典方法

    1、   clear

    清楚字典中所有的项,无返回值

    >>>d={}

    >>>d['name']='Tanggao'

    >>>d['age']=20

    >>>d

    {'age':20, 'name': 'Tanggao'}

    >>>returned_value=d.clear()

    >>>d

    {}

    >>>print returned_value

    None

      那么这个方法有什么用了,看看两个例子就知道了

    #例子一

    >>>x={}

    >>>y=x

    >>>x['key']='value'

    >>>y

    {'key':'value'}

    >>>x={}

    >>>y

    {'key':'value'}

    #例子二

    >>>x={}

    >>>y=x

    >>>x['key']='value'

    >>>y

    {'key':'value'}

    >>>x.clear()

    >>>y

    {}

    >>> 

     

    2、   copy

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

    相比于直接把某个字典赋给一个引用变量的区别如下:

    >>>x={'x':1,'y':2}

    >>>y=x

    >>>y

    {'y':2, 'x': 1}

    >>>x['x']=33

    >>>y

    {'y':2, 'x': 33}

     

       但是下面两种情况:

       在副本中替换值的时候,原始字典不受影响

    >>>x={'username':'admin','machines':['foo','bar','baz']}

    >>>y=x.copy()

    >>>y['username']='Tanggao'

    >>>y

    {'username':'Tanggao', 'machines': ['foo', 'bar', 'baz']}

    >>>x

    {'username':'admin', 'machines': ['foo', 'bar', 'baz']}

      

       修改了某个值,而不是替换,浅度复制的字典将受到影响,解决这种问题的方法就是使用深度复制deepcop方法

    >>>fromcopy import deepcopy

    >>>d={}

    >>>d['name']=['tom','tg']

    >>>c=d.copy()

    >>>dc=deepcopy(d)

    >>>d['name'].append('Gao')

    #字典的值变了

    >>>c

    {'name':['tom', 'tg', 'Gao']}

    #深度复制不受原始字典的影响了,完完全全是独立的了

    >>>dc

    {'name':['tom', 'tg']}

     

    3、   fromkeys

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

    >>>dict1={}.fromkeys(('x','y'))

    >>>dict1

    {'y':None, 'x': None}

    >>>dict2={}.fromkeys(('x','y'),-1)

    >>>dict2

    {'y':-1, 'x': -1}

    >>>dict3=dict.fromkeys('x','y')

    >>>dict3

    {'x':'y'}

     

    4、   get

    通过键访问值,平时如果通过一般方法访问键的值,如果键不存在会报错,而get方法不会

    >>>d={}

    >>>print d['name']

    Traceback(most recent call last):

     File "<stdin>", line 1, in<module>

    KeyError:'name'

    >>>print d.get('name')

    None

    >>>d['name']='Tanggao'

    >>>print d.get('name')

    Tanggao

     

    5、   has_key

    检查字典中是否含有给出的键,相当于 key in d,但是Python3.0中没有这个方法

    >>>d['name']='Tanggao'

    >>>print d.get('name')

    Tanggao

    >>>d.has_key('name')

    True

    >>>d.has_key('age')

    False

     

    6、   items和iteritems

    items方法将所有的字典项以列表方式返回,无序返回

    >>>d={'title':'Python Web Site','url':'http://www.python.org','spam':0}

    >>>d.items()

    [('url','http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')]

     

       iteritems方法的作用大致相同,但是会返回一个迭代器对象而不是列表,这个迭代器可以通过next0方法访问每个项,直到到达最后一个项,访问完最后一项,再接着遍历访问就会报错

    >>>it=d.iteritems()

    >>>it

    <dictionary-itemiteratorobject at 0xbd70a8>

    >>>it.next()

    ('url','http://www.python.org')

    >>>it.next()

    ('spam',0)

    >>>it.next()

    ('title','Python Web Site')

    >>>it.next()

    Traceback(most recent call last):

      File "<stdin>", line 1, in<module>

    StopIteration

     

    7、   key和iterkeys

    key方法将字典中的键以列表形式返回,而iterkeys则返回针对键的迭代器

    >>>ll=d.keys()

    >>>ll

    ['url','spam', 'title']

    >>>it1=d.iterkeys()

    >>>it1.next()

    'url'

    >>>it1.next()

    'spam'

    >>>it1.next()

    'title'

    >>>it1.next()

    Traceback(most recent call last):

      File "<stdin>", line 1, in<module>

    StopIteration

     

    8、   pop

    pop方法将字典中的某项删除,以列表形式返回删除的项

    >>>d={'title':'Python Web Site','url':'http://www.python.org','spam':0}

    >>>d.pop('spam')

    0

     

    9、   popitem

    随机弹出字典中的项

    >>>d={'title':'Python Web Site','url':'http://www.python.org','spam':0}

    >>>d.pop('spam')

    0

    >>>d={'title':'Python Web Site','url':'http://www.python.org','spam':0}

    >>>d.popitem()

    ('url','http://www.python.org')

    >>>d.popitem()

    ('spam',0)

    >>>d.popitem()

    ('title','Python Web Site')

    >>>d.popitem()

    Traceback(most recent call last):

      File "<stdin>", line 1, in<module>

    KeyError:'popitem(): dictionary is empty'

     

    10、  setdefault

    setdefalut方法能够获得与给定键相关联的值,除此之外,还能在字典中不含有给定键的情况下设定相应的键值。注意:如果键不存在的时候,setdefault返回默认值并且相应地更新字典,如果键存在,那么就返回与其对应的值,但是不改变字典。默认值可选,如果不设定,为None

    >>>d={}

    >>>d.setdefault('name','Tg')

    'Tg'

    >>>d

    {'name':'Tg'}

    >>>d['name']='Tom'

    >>>d

    {'name':'Tom'}

    >>>d.setdefault('name','Tg')

    'Tom'

    >>>d

    {'name':'Tom'}

    >>>d1={}

    >>>print d1.setdefault('name')

    None

    >>>d1

    {'name':None}

     

    11、  update

    update方法可以利用一个字典更新另外一个字典,提供的字典的项会被添加到旧的字典中,若键相同,则覆盖

    >>>d={'title':'Python Web Site','url':'http://www.python.org','spam':0}

    >>>x={'title':'Tanggao is good ','age':20}

    >>>d.update(x)

    >>>d

    {'url':'http://www.python.org', 'age': 20, 'spam': 0, 'title': 'Tanggao is good '}

    >>> 

     

    12、  values和itervalues

    values方法以列表的形式返回字典中的值,itervalues返回值的迭代器

    >>>d={}

    >>>d[1]=1

    >>>d[2]=2

    >>>d[3]=3

    >>>d[4]=1

    >>>d.values()

    [1,2, 3, 1]

    >>>it=d.itervalues()

    >>>it.next()

    1

    >>>it.next()

    2

    >>>it.next()

    3

    >>>it.next()

    1

    >>>it.next()

    Traceback(most recent call last):

      File "<stdin>", line 1, in<module>

    StopIteration

     

    13、sorted

    sorted(dic.iteritems(), key=lambda d:d[1], reverse=False)

    说明:对字典dic中的元素按照d[1](d[1]是value,d[0]是key,和d没关系,可以改为a什么的)进行升序排序,通过设置reverse的True或False可以进行逆序,并返回排序后的字典(该排序后的字典由元组组成,其形式为[(key1,value1),(key2,value2),...],且原字典保持不变)

    >>>d={'title':'Python Web Site','url':'http://www.python.org','spam':0}

    >>>sorted(d)

    ['spam','title', 'url']

    >>>sorted(d.iteritems(),key=lambda d:d[1])

    [('spam',0), ('title', 'Python Web Site'), ('url', 'http://www.python.org')]

    >>>sorted(d.iteritems(),key=lambda d:d[0])

    [('spam',0), ('title', 'Python Web Site'), ('url', 'http://www.python.org')]

    >>>sorted(d.iteritems(),key=lambda d:d[0],reverse=True)

    [('url','http://www.python.org'), ('title', 'Python Web Site'), ('spam', 0)]

    >>> 

     

    方法总结:

    转载请注明原文地址: https://ju.6miu.com/read-1293799.html
    最新回复(0)