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

    python 字典操作方法详解

    一、总结

    一句话总结:

    字典就是键值对映射 ,像js和php中的键值对数组:{'name':'jamnes','age':'32'}

    1、python字典的增删改查?

    定义:info ={'name':'jamnes','age':'32','work':'basketplayer'}
    增:info['sex'] = 'fale',改:info['age']='33'
    删:pop():删除指定key的键值对:info.pop('work')

    二、python 字典操作方法详解

    转自或参考:python 字典操作方法详解 - 战争热诚 - 博客园
    https://www.cnblogs.com/wj-1314/p/8421724.html

      字典是一种通过名字或者关键字引用的得数据结构,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 ,传入的顺序不一样,那么得到的字典是不一样的。

  • 相关阅读:
    ini_set /ini_get函数功能-----PHP
    【转】那个什么都懂的家伙
    word 2007为不同页插入不同页眉页脚
    August 26th 2017 Week 34th Saturday
    【2017-11-08】Linux与openCV:opencv版本查看及库文件位置等
    August 25th 2017 Week 34th Friday
    August 24th 2017 Week 34th Thursday
    August 23rd 2017 Week 34th Wednesday
    August 22nd 2017 Week 34th Tuesday
    August 21st 2017 Week 34th Monday
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/13150195.html
Copyright © 2011-2022 走看看