• 关于字典


    重点知识:

    序号

    函数                                功能
    1 dict()  
    2 fromkeys()  
    3 setdegault()  
    4 pop()  
    5 popiterm()  
    6 update()  
    7 get()  
    8 clear()  
    9 del()  

    字典是python语言中唯一内建的映射类型。

    一个字典对象是可变的,它是一个容器类型,能存储任意个数的python对象。

    字典和序列的区别是存储方式和访问数据的方式不同。

    字典的键和值之间是相关联的,而序列的索引可以是随机的。

    序列类型用有序的数字键做索引将数据以数组的形式索引,一般索引和所存储的数据毫无关系。

    映射类型通常被称作hash表,因为字典的对象就是hash类型的。

    hash表中存储的每一条数据叫做“值,与它相关的键一起存储。

    hash表的算法是获取键,对键执行一个叫做hash函数的操作,并根据计算的结果,选择在数据结构的某个地方来存储值。

    任何一个值的存储的地址皆取决于它的键,因为这种随意性,hash表中的值是没有顺序的。

    为什么键必须是hash值,因为hash值的不可变性,如果键发生变化,hash值将不能可靠的来存储数据。

    1.创建字典和赋值:直接创建、dict()、fromkeys()

    >>> info1 = {'name':'kebi','age':25}  #直接创建字典
    >>> info1
    {'name': 'kebi', 'age': 25}
    
    >>> info2 = dict([('name','maoxian'),('age',24)])
    >>> info2      #从元祖映射
    {'name': 'maoxian', 'age': 24}
    >>> info6 = dict([['gailun','zhaoxin'],['shangdan','daye']])
    >>> info6         #从序列映射
    {'gailun': 'zhaoxin', 'shangdan': 'daye'} 
    
    >>> info2 = dict(name = 'xiaoliao',age = 23)
    >>> info2
    {'name': 'xiaoliao', 'age': 23}
    
    >>> info4 = {}.fromkeys(('wuhan','xiaogan'),None)
    >>> info4    #fromkeys也可以创建,理论说不算,因为该函数必须事先存在一个空字典
    {'wuhan': None, 'xiaogan': None}    
    >>> info5 = {}.fromkeys(['anlu','yunmeng'],'Hubei')
    >>> info5
    {'anlu': 'Hubei', 'yunmeng': 'Hubei'}

    2.赋值:直接赋值、setdefault()

    >>> group = {'Top':'xinye','Mid':'xiaoniao'}
    >>> group
    {'Top': 'xinye', 'Mid': 'xiaoniao'}
    >>> group['Jungle'] = 'kebi'
    >>> group
    {'Top': 'xinye', 'Mid': 'xiaoniao', 'Jungle': 'kebi'}
    
    
    >>> group
    {'Top': 'xinye', 'Mid': 'xiaoniao', 'Jungle': 'kebi'}
    >>> group.setdefault('ADC','maoxian')
    'maoxian'
    >>> group
    {'Top': 'xinye', 'Mid': 'xiaoniao', 'Jungle': 'kebi', 'ADC': 'maoxian'}

    如果需要添加的值已经存在,则不变
    >>> info
    {'name': 'kebi', 'age': 25}
    >>> info.setdefault('name','maoxian')   
    'kebi'
    >>> info
    {'name': 'kebi', 'age': 25}

    还有一个update可以用来进行赋值。

    update:将一个字典中的键值对全部加入到另一个字典中。如果键存在重复,则会更新旧的值。

    >>> info
    {'name': 'kebi', 'sex': 'man'}
    >>> ad = {'age':25}
    >>> info.update(ad)
    >>> info
    {'name': 'kebi', 'sex': 'man', 'age': 25}   #合并赋值
    >>> ad1 = {'name':'maoxian','like':'woman'}
    >>> info.update(ad1)
    >>> info
    {'name': 'maoxian', 'sex': 'man', 'age': 25, 'like': 'woman'}   #更新合并
    >>> 
    KeyboardInterrupt

    3.访问:通过键访问、get()

    >>> group['ADC']      #直接访问,没有就会报错
    'maoxian'
    >>> group.get('ADC')   #get不错,还不会报错
    'maoxian'
    >>> info.get('age','not in')   #可以指定返回值
    'not in'
    >>> group.keys()     #查键
    dict_keys(['Top', 'Mid', 'Jungle', 'ADC'])
    >>> group.values()   #查值
    dict_values(['xinye', 'xiaoniao', 'kebi', 'maoxian'])

    4.删除元素或者字典:del、pop()、popitem()、clear()

    {'Top': 'xinye', 'Mid': 'xiaoniao', 'Jungle': 'kebi', 'ADC': 'maoxian'}
    >>> del group['ADC']    #删除指定键值对
    >>> group
    {'Top': 'xinye', 'Mid': 'xiaoniao', 'Jungle': 'kebi'}
    >>> group.popitem()    #删除最后一个键值对,不能指定删谁
    ('Jungle', 'kebi')
    >>> group
    {'Top': 'xinye', 'Mid': 'xiaoniao'}
    >>> group.pop('Top')    #必须指定要删的对象,还可以指定查不到值时返回的信息,没有指定就会报错。
    'xinye'
    >>> group
    {'Mid': 'xiaoniao'}
    >>> info
    {'name': 'kebi', 'sex': 'man'}
    >>> info.pop('age')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>   #没有值就会报错
    KeyError: 'age'
    
    >>> info.pop('age',None)  #指定查找不到,不返回值
    >>> info.pop('age','Error')  #指定返回值
    'Error'
    
    
    >>> group
    {'Mid': 'xiaoniao', 'ADC': 'xinxin'}
    >>> group.clear()   #清空字典
    >>> group
    {}
    >>> group
    {'ADC': 'xinxin', 'sup': None}
    
    >>> del group   #彻底删除
    >>> group
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'group' is not defined

    5.相关知识

    >>> print("%(name)s is %(position)s" %info)   #字典作为被格式化的对象
    kebi is Jungle
    >>> print("%(position)s is %(name)s" %info)
    Jungle is kebi     #需要指定键值

    字典中的键有两条是必须要遵守的:

    (1)不允许一个键对应多个值

    (2)键必须是可hash的

    >>> group = {'Top':'kebi','Top':'huagu'}
    >>> group
    {'Top': 'huagu'}

    puthon并不会因为字典中的键存在冲突就产生错误。这样做是为了节省内存。

    最后补充一点:字典也是可以嵌套的的。

  • 相关阅读:
    javascript之void0
    Sublime之OS X Command Line
    iOS之Monkey
    iOS之在成员函数中使用Block
    mac之javascriptcore
    国内成功码农的发展轨迹
    HTML之表格初步
    ClientSide JavaScript Timeline
    javascript正则表达式
    同源策略
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/7707601.html
Copyright © 2020-2023  润新知