欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python基础语法----dict字典

程序员文章站 2022-05-19 14:20:49
...
  • 字典dict
    key-value键值对的数据的集合
    可变的,无序的,key不重复

(一)字典元素的访问

  • d[key]
    返回key对应的值value
    key不存在抛出KeyError异常
  • get(key[,default])
    返回key对应的值value
    key不存在返回缺省值,如果没有设置缺省值就返回None
  • setdefault(key[,default])
    返回key对应的值value
    key不存在,添加kv对,value设置default,并返回default,如果default没有设置,缺省值为None

(二)字典元素的添加

  • d[key] = value
    • 将key对应的值修改为value
    • key不存在添加新的kv对
  • update([other]) ->None
    • 使用另一个字典的KVd对更新字典
    • key不存在,就添加
    • key存在,覆盖已经存在的key对应的值
    • 就地修改
      d.update(red = 1)
      d.update(((‘red’,2),))
      d.update({‘red’:3})

(三)字典删除

  • pop(key[,default])
    • key存在,移除它,并返回它的value
    • key不存在,返回给定的default
    • default未设置,key不存在则抛出KeyError异常
  • popitem()
    • 移除并返回一个任意的键值对
    • 字典为empty,抛出KeyError
  • clear()
    清空字典
  • del语句

(四)字典遍历

  • for … in dict
    • 遍历key
      for k in d:
      print(k)
      for k in d.keys():
      print(K)
    • 遍历value
      for v in d.values():
      print(v)
    • 遍历item,即kv对
      for item in d.items():
      print(item)
      for item in d.items():
      print(item[0],item[1])
      for k,v in d.items() :
      print(k,v)
      for k,_ in d.items():
      print(k)

(五)总结

  • Python3中,keys,values,items方法返回一个类似一个生成器的可迭代对象,不会把函数的返回结果复制到内存中
    • 返回dictionary view 对象,可以使用len(),iter,in操作
    • 字典中的entry的动态视图,字典变化,视图将反应出这些变化
    • key返回一个类set对象,也就死可以看做一个set集合
    • 如果values都可以hash,那么items也可以看做是类set对象
  • Python2中,上面的方法会返回一个新的列表,占据新的内存空间.所以Python2建议使用iterkeys,itervalues,iteritems版本,返回一个迭代器,而不是返回一个copy

(六)字典中的key

key的要求和set的元素要求一致

  • set的元素可以就是看做key,set可以看作dict的简化版
  • hashable 可哈希才可以作为key,可以使用hash()测试
  • d = {1:0,2.0:3,“abc”:None,(‘hello’,;word’,‘python’):“string”,b’abc’:‘135’}

(七)defaultdict

  • collections.defaultdict([default_factory[,…]])
    • 第一个参数是default_factory,缺省是None,它提供一个初始化函数.当key不存在的时候,会调用这个工厂函数来生成key对应的value
    • 构造一个字典,values是字典,为其添加随机个元素
import random

d1 = {}
for k in 'abcdf':
    for v in range(random.randint(1,5)):
        if k not in d1.keys():
            d1[k] = []
        d1[k].append(v)
print(d1)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

from collections import defaultdict
import random
d1 = defaultdict(list)
for k in 'abcdef':
    for v in range(random.randint(1,5)):
        d1[k].append(v)
    print(d1)

(八)OrderedDict

  • collections.OrderedDict([items])
    • key并不是按照加入的顺序排序,可以使用OrdereDict记录顺序
from collections import OrderedDict
import random
d = {'banana':3,'apple':4,'pear':1,'orange':2}
print(d)
keys = list(d.keys())
random.shuffle(keys)
print(keys)
od = OrderedDict()
for key in keys:
    od[key] = d[key]
print(od)
print(od.keys())
  • 有序字典可以记录元素插入的顺序,打印的时候也是按照这个顺序输出打印
  • 3.6版本的Python的字典就是记录Key插入的顺序(Ipython不一定有效果)
  • 应用场景:
  • 假如使用字典记录了N个产品,这些产品使用Id由小到大加入到字典中
  • 除了使用字典索引的遍历,有时候需要取出Id,但是希望按照输入的顺序,因为输入顺序是有序的
  • 否则还需要重新把遍历到的值排序
相关标签: python基础