dict字典的基本使用

末蓝、 2022-02-24 15:44 401阅读 0赞

字典dict

  • 字典是一个非线性结构,是key-value组成的键值对的数据集合。
  • 字典的特点:可变的、无序的、key不重复。

字典的定义

  • 【{}或者dict()】可以定义一个空字典

    • 例如:

      a = dict()
      b = { }
      print(a,b,type(a),type(b))

    dict001

  • 【dict(**kwargs)】可以使用name=value键值对,初始化一个字典

    • 例如:

      c = dict(gdy=”abc”,x=90,y=100)
      print(c,type(c))

    dict002

  • 【dict(iterable,**kwarg)】使用可迭代对象和name = value度构造字典、不过可迭代对象的元素必须是一个二元结构

    • 例如:

      d = dict(((“a”,”001”),(“b”,”002”)))
      print(d,type(d))

    dict003

  • 【dict(mapping,**kwarg)】使用一个字典构建另一个字典

    • 例如:

      e = { “a”:10,”b”:20,”c”:30}
      f = dict(e,abc=”20”)
      print(e,f)

    dict004

  • 【{}】直接定义:例如:e = {“a”:10,“b”:20,“c”:30}
  • fromkeys(iterable,value) 【类方法】 #根据建集合初始化一个字典

    • iterable :为可迭代的键值集合
    • value:为默认所有建对应的默认值。(可以不写,如果没有默认为None)
    • 例如:

      a = dict.fromkeys(range(10),0)
      b = dict.fromkeys(range(10))
      print(a)
      print(b)

    dict005

字典元素的访问

  • 【d[key]】 返回可用对应的值value,如果可以不存在会抛出keyError异常
  • 【get(key[,default])】 返回key对应的值value,如果key不存在就返回缺省值default,缺失值默认为None
  • 【setdefault(key[,default])】返回key对应的值value,如果key不存在,添加kv对,value设置为default,并返回default,如果default没有设置,则返回None
  • 【keys()】获取字典中所有key的集合
  • 【values()】或者字典中所有值values的集合
  • 【items()】获取字典中所有键值对组成的集合

字典增加和修改

  • 【d[key] = value】将key对象的值修改为value,如果key不存在就添加新的key对应value
  • 【update([other])—>None】 使用一个字典里面的数据对本字典的更新,如果key不存在就添加,key存在就覆盖已经存在的key对应的值。 就地修改,无返回值

    • 例如:

      a = { “1”:10,”2”:100,”3”:200,”b”:10,”c”:20}
      print(a)
      a.update(b=100) #更新键值为b的值为100
      print(a)
      a.update([(“1”,”ab”)]) #将键值”1”的值修改为”ab”
      print(a)
      c = a.setdefault(1,5) #获取键值为1对应的value的值,如果没有就插入键值对1,5 ,并返回默认值
      c2 = a.setdefault(1,6) #获取键值为1对应的value的值,如果没有就插入键值对1,6,滨返回默认值
      print(a,c,c2)
      a.update([(1,2)]) #将键值对key=1的值修改为2,如果没有找到键值为1,就添加键值对1,2
      print(a)
      a.update([(1,5)]) #将键值为1对应的值修改为5
      print(a)

    dict006

字典的删除

  • 【pop(key[,default])】 将key对应的值删除,并返回key对应的值。如果key不存在就返回缺省值defalut。如果未设置default,并且key不存在会抛出异常keyError
  • 【popitem()】移除并返回任意的键值对,字典为empty空时会抛出异常KeyError
  • 【clear()】清空字典
  • 【del d[key]】 删除指定key的键值对
  • 相关参数 del语句

    • 例如【del a[‘c’]】看着像删除了一个对象,本质上减少了一个对象的引用,del实际上删除的是名称,而不是对象。

      a = True
      b = [1,2]
      c = [b,3]
      print(a,b,c)
      del a #将变量a的名称删除

      print(a) #会报错,因为变量a已经不存在

      del b #将变量b的名称删除
      print(c)

    dict007

字典的遍历

  • list(d.keys()) 根据字典的建集合或对应的list集合
    注意:【for i in a.keys() 】等价于【for i in a】或者直接使用如下方法直接遍历出元素和元组
    【for i,k in a.items()】

    • 例如:

      a = dict(a=1,b=2,c=3,d=4,e=5)
      print(a.keys())
      b = list(a.keys())
      print(b)
      for i in a.keys(): print(i) #打印所有key的值
      print(“————————-“)
      for k in a : print(k)

    dict008

总结

  • python3中 keys、values、items方法返回一个类似生成器的可迭代对象,不会吧函数的返回结果复制到内存中,返回的对象可以使用len()、iter()、in操作

    • 返回Dictionary view对象,可以使用len()、iter()、in操作
    • 字典的entry的动态视图,字典变化,视图将反映出这些变化
    • keys返回一个类set对象,也就是可以看做一个set集合
    • 如果values都可以hash,那么items也可以看做是类set对象
  • python2中上述方法返回的是一个新列表,占用新的内存空间。所以Python2建议使用iterkeys、itervalues、iteritems版本,返回一个迭代器,而不是返回一个copy

相关字典

缺省字典(defaultdict)

  • 需要导入模块import collections
  • 定义方式:

    import collections
    defdict = collections.defaultdict(dict) #建立一个缺省值为dict的缺省字典。
    deflist = collections.defaultdict(list) #建立一个缺省值为list的缺省字典。
    defset = collections.defaultdict(set) #建立一个缺省值为set的缺省字典。
    defdict[“c”] = 1
    defdict.update([(“a”,”b”)])
    deflist[“a”] = 1
    defset[“b”] = 1
    for i in range(5):

    1. deflist[i].append(i) #当key=i的键对应的值不存在是,默认创建一个key对应的list集合。并在集合中添加i元素
    2. defset[i].update([(i,i)]) #当key=i的键对应的值不存在是,默认创建一个key对应的set集合。并在集合中添加i元素
    3. defdict[i].update([(i,i)]) #当key=i的键对应的值不存在是,默认创建一个key对应的dict集合。并在集合中添加i元素

    print(defdict,deflist,defset,sep=”\n”)

dict009

有序字典(OrderedDict)

  • 和defaultdict一样,需要导入模块import collection
  • 定义方式和defaultdict类似。但不同的是OrderedDict是有序字典,里面元素的排列顺序是元素的插入顺序。

    • 注意:3.6版本中的Python的字典就是记录key插入的顺序(IPython不一定有效)
  • 简单示例

    import collections
    order = collections.OrderedDict() #实例化一个有序字典
    order.update([(4,10)]) # 插入键值对4,10
    for i in range(5): #给字典插入新元素

    1. order[i] = i

    order.setdefault(6,10) #给字典插入新元素
    print(order.keys())
    print(order.values())
    print(order)

dict010

  • 有序字典排序

    • sorted(iterable, /, *, key=None, reverse=False) 函数会返回一个新的字典对象
    • 例如:

      import random,string
      word = { :2 for in [random.choice(string.asciilowercase) for in range(20)]} #随机生成20个字母组成的字典
      print(word)
      wordsort = sorted(word.items()) #使用sorted将字典,按照key排序。
      print(wordsort)

    dict011

字典与list结合使用:

  • 可以使用字典记录元素。在加个列表list记录存在字典中元素的实际位置,用列表的顺序记录在字典中对应元素的大小。这样在使用list遍历时,可以保证在列表中元素的顺序。而再查找元素时使用字典查找,保证了检索的速度,避免了list的缺点。

发表评论

表情:
评论列表 (有 0 条评论,401人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Python中字典dict

    dict的作用 方便查询,例如根据姓名查询一个公司的几千人中的某一人的信息,用列表的话,要遍历查询,麻烦。而在Python中,完全可以利用dict更好的解决此类问题。

    相关 字典(dict)

    字典创建 赋值创建字典 通过工厂函数创建字典 通过字典的 fromkeys 方法创建字典 赋值创建字典 , key-value , 键值对 ![