zoukankan      html  css  js  c++  java
  • python 字典操作方法详解

      字典是一种通过名字或者关键字引用的得数据结构,key 类型需要时被哈希,其键可以是数字、字符串、元组,这种结构类型也称之为映射。字典类型是Python中唯一內建的映射类型。

      注意,浮点数比较很不精确,因此千万不要用浮点数作为key!

    python字典包含了11个内置方法,具体如下:

    序 号  函数 描述
    1 clear(self)  删除字典内所有的元素
    2 copy(self) 返回一个字典的浅copy ,俗称赋值
    3 fromkeys(*args,**kwargs) 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
    4 get(self,k,d=None)  返回指定键的值,如果值不在字典中返回default值
    5 items(self) 以列表返回可遍历的(键, 值) 元组数组
    6 keys(self)  以列表返回一个字典所有的键
    7 pop(self,k,d=None)  删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值
    8 popitem(self)  随机返回并删除字典中的一对键和值
    9 setdefault(self,k,d=None)  和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
    10 update(self,E=None,**F)  把self的东西更新到外面字典
    11 values(self)  以列表返回字典中的所有值

      具体举例子解释如下:

    1,字典的键不能是list类型:

    list = [1,2,3,4]
    info2 = {list:'number'}
    
    结果:
    Traceback (most recent call last):
      File "D:/字典.py", line 2, in <module>
        info2 = {list:'number'}
    TypeError: unhashable type: 'list'
    

    2,list/set/dict 均不可被哈希  ,int、float、str、tuple:是可以哈希的

    1 list.__hash__;
        #结果为None
    2 set.__hash__; 
        #结果为None
    3 dict.__hash__; 
        #结果为None
    4 print(int.__hash__);
        # <slot wrapper '__hash__' of 'int' objects>
    5 print(float.__hash__); 
        #<slot wrapper '__hash__' of 'float' objects>
    6 print(str.__hash__);  
        #<slot wrapper '__hash__' of 'str' objects>
    7 print(tuple.__hash__);
        #<slot wrapper '__hash__' of 'tuple' objects> 
    

     3,增

    info ={'name':'jamnes','age':'32','work':'basketplayer'}
    info['sex'] = 'fale'
    print(info)
    结果:
    {'name': 'jamnes', 'age': '32', 'work': 'basketplayer', 'sex': 'fale'}
    

    4,删

    4-1 pop():删除指定key的键值对

    info ={'name':'jamnes','age':'32','work':'basketplayer'}
    info.pop('work')
    print(info)
    结果:
    {'name': 'jamnes', 'age': '32'}
    

    4-2 clear():清除所有的键值对

    info ={'name':'jamnes','age':'32','work':'basketplayer'}
    info.clear()
    print(info)
    结果:
    {}
    

    4-3setdefault():删除指定的元素,如果没有,则返回none

    info ={'name':'jamnes','age':'32','work':'basketplayer'}
    info.setdefault('son')
    print(info)
    结果:
    None
    

      

    5,改

    info ={'name':'jamnes','age':'32','work':'basketplayer'}
    info['age']='33'
    print(info)
    结果:
    {'name': 'jamnes', 'age': '33', 'work': 'basketplayer'}
    

    6,查

    6-1 get():通过给定的key,查找对应的value,如果给定的可以在字典中无,则返回None

    info ={'name':'jamnes','age':'32','work':'basketplayer'}
    a =info.get('age')
    print(a)
    结果:
    32
    

    6-2 setdefault():通过给定的key,查找对应的value,如果给定的可以在字典中无,则返回None,
          同时在字典中增加'test': None键值对

    info ={'name':'jamnes','age':'32','work':'basketplayer'}
    a =info.setdefault('age')
    print(a)
    print(info)
    b =info.setdefault('sex')
    print(b)
    print(info)
    
    结果:
    32
    {'name': 'jamnes', 'age': '32', 'work': 'basketplayer'}
    None
    {'name': 'jamnes', 'age': '32', 'work': 'basketplayer', 'sex': None}
    

    7,更新

    7-1update()=

    一,更新里面有的信息,就是改变
    info ={'name':'jamnes','age':'32','work':'basketplayer'}
    info2 = {'name':'wade','age':'33','work':'basketplayer'}
    info.update(info2)
    print(info)
    结果:
    {'name':'wade','age':'33','work':'basketplayer'}
    
    二,更新里面没有的信息,就是添加
    info ={'name':'jamnes','age':'32','work':'basketplayer'}
    info2 = {'honor':'3 champions'}
    info.update(info2)
    print(info)
    结果:
    {'name': 'jamnes', 'age': '32', 'work': 'basketplayer', 'honor': '3 champions'}
    

      

    8,返回键,值,键值对

      keys():以列表(list)返回字典中的所有键(key),字典是无序的,所以这个list返回的不是定义字典的顺序

      values():以列表(list)返回字典中的所有值,这个list的顺序跟keys()返回的list顺序是一一对应的

      items():以列表(list)返回可遍历的(键, 值) 元组数组,这个tuple的list包含了dictionary的所有数据

    dict ={'k1':'v1','k2':'v2','k3':'v3'}
    #1,请循环遍历除所有的key
    for keys in dict.keys():
        print(keys)
    
    #遍历出所有的value
    for value in dict.values():
        print(value)
    
    #遍历出
    for key,value in dict.items():
        print(key+':'+value)
    #结果:
    k1
    k2
    k3
    v1
    v2
    v3
    k1:v1
    k2:v2
    k3:v3

    9,练习字典

      dic={'k1':"v1","k2":"v2","k3":[11,22,33]}

      a.请循环输出所有的key

      b.请循环输出所有的value

      c.请循环输出所有的key和value

      d.请在字典中添加一个键值对,"k4":"v4",输出添加后的字典

      e.请在修改字典中“k1”对应的值为“alex”,输出修改后的字典

      f.请在k3对应的值中追加一个元素44,输出修改后的字典

      g.请在k3对应的值的第1个位置插入个元素18,输出修改后的字典

    dic={'k1':"v1","k2":"v2","k3":[11,22,33]}
    #   a.请循环输出所有的key
    for i in dic :
        print(i)
    for i in dic.keys():
        print(i)
    #   b.请循环输出所有的value
    for i in dic.values():
        print(i)
      c.请循环输出所有的key和value
    for i,j in dic.items():
        print(i,j)
    #   d.请在字典中添加一个键值对,"k4":"v4",输出添加后的字典
    dic2 = {'k4':'v4'}
    dic.update(dic2)
    print(dic)
    dic['k4'] = 'v4'
    print(dic)
    
    #   e.请在修改字典中“k1”对应的值为“alex”,输出修改后的字典
    dic['k1'] ='alex'
    print(dic)
      f.请在k3对应的值中追加一个元素44,输出修改后的字典
    dic['k3'].append(44)
    print(dic)
    #   g.请在k3对应的值的第1个位置插入个元素18,输出修改后的字典
    dic['k3'].insert(0,18)
    print(dic)
    

    10,根据字典的键值进行排序  

       反序: reverse = True

    mylist = ['学习', '工作', '玩耍', '学习', '工作', '工作']
    print(mylist)
    # list_element 是另外一个列表,里面的内容是list_element里面的无重复项
    myset = set(mylist)
    
    mydict = {}
    
    for item in myset:
        res = mylist.count(item)
        sample = {item: res}
        # print(res)
        # print("the %d has found %d" % (item, mylist.count(item)))
        mydict.update(sample)
    print(mydict)
    print(sorted(mydict.items(), key=lambda mydict:mydict[1],reverse=True))
    

      

    11,OrderedDict 的使用 

      在Python中,dict这个数据结构由于hash的特性,是无序的,这在有时候会给我们带来一些麻烦,幸运的时,在collections模块中为我们提供了 OrderedDict ,当你需要获取一个有序的字典对象时,试用它即可。

      python中的字典(dict)对象可使用“键”,“值” 对的形式存取值,但默认的内置类型字典中的元素是无序的。Collections模块下的OrderedDict类实现了对字典的排序,OrderedDict是dict的一个子类,实现了对字典排序的功能,下面看一下两者数据类型的对比。

    from collections import OrderedDict
    
    print('Normal Dictionary:')
    d = {}
    d['name'] = 'v1'
    d['age'] = 'v2'
    d['job'] = 'v3'
    d['address'] = 'v4'
    
    d1 = {}
    d1['job'] = 'v3'
    d1['address'] = 'v4'
    d1['name'] = 'v1'
    d1['age'] = 'v2'
    
    print(d)
    print(d1)
    print(d == d1)
    
    print('OrderedDict:')
    d2 = OrderedDict()
    d2['name'] = 'v1'
    d2['age'] = 'v2'
    d2['job'] = 'v3'
    
    d3 = OrderedDict()
    d3['job'] = 'v3'
    d3['age'] = 'v2'
    d3['name'] = 'v1'
    
    print(d2)
    print(d3)
    print(d2 == d3)
    

      输出结果:

    Normal Dictionary:
    {'name': 'v1', 'age': 'v2', 'job': 'v3', 'address': 'v4'}
    {'job': 'v3', 'address': 'v4', 'name': 'v1', 'age': 'v2'}
    True
    OrderedDict:
    OrderedDict([('name', 'v1'), ('age', 'v2'), ('job', 'v3')])
    OrderedDict([('job', 'v3'), ('age', 'v2'), ('name', 'v1')])
    
    False
    

      从结果来看,如果是普通的字典,即使传入的顺序不一样,但是依然是相同的字典;如果是OrderedDict ,传入的顺序不一样,那么得到的字典是不一样的。

    集合操作方法详解,请看下面博客:http://www.cnblogs.com/wj-1314/p/8423273.html

    字符串操作方法详解,请看下面博客:http://www.cnblogs.com/wj-1314/p/8419009.html

    列表操作方法详解,请看下面博客:http://www.cnblogs.com/wj-1314/p/8433116.html

  • 相关阅读:
    LPT算法--时间调度问题
    Java语法学习1
    用JS动态显示文本
    用JS动态创建一个有序表(根据输入添加子列表项)
    邻接表链式结构的实现和顺序结构的实现
    HDU 1242 特殊化带结构体BFS
    POJ 1562深搜判断连体油田个数
    Uva 8道比较水的数论 (练练英语阅读理解)
    HDU 2024 C语言合法标识符(笑)
    再做POJ2406 KMPnext数组的运用
  • 原文地址:https://www.cnblogs.com/wj-1314/p/8421724.html
Copyright © 2011-2022 走看看