zoukankan      html  css  js  c++  java
  • 关于字典

    重点知识:

    序号

    函数                                功能
    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并不会因为字典中的键存在冲突就产生错误。这样做是为了节省内存。

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

  • 相关阅读:
    C++中使用多线程
    hdu 4223 dp 求连续子序列的和的绝对值最小值
    hdu 1372 bfs 计算起点到终点的距离
    hdu 4217 线段树 依次取第几个最小值,求其sum
    心得
    hdu 1175 bfs 按要求进行搜索,是否能到达,抵消两个(相同)棋子
    hdu 4221 greed 注意范围 工作延期,使整个工作时间罚时最少的单个罚时最长的值
    hdu 2844 多重背包 多种硬币,每一种硬币有一点数量,看他能组成多少种钱
    uva LCDDisplay
    hdu 4218 模拟 根据一个圆点和半径画一个圆 注意半径要求
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/7707601.html
Copyright © 2011-2022 走看看