dict字典的基本使用

本文详细介绍了Python字典dict的定义、访问、增删改查等基本操作,包括使用{}或dict()创建字典、get()、setdefault()、keys()、values()、items()等方法。此外,还讲解了字典的遍历、update()函数以及del语句的使用。文章还探讨了Python3中字典视图对象的特性,并提到了相关字典类型如defaultdict和OrderedDict,最后讨论了字典与列表结合使用的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字典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):
    deflist[i].append(i) #当key=i的键对应的值不存在是,默认创建一个key对应的list集合。并在集合中添加i元素
    defset[i].update([(i,i)]) #当key=i的键对应的值不存在是,默认创建一个key对应的set集合。并在集合中添加i元素
    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):   #给字典插入新元素
        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.ascii_lowercase) for _ in range(20)]}  #随机生成20个字母组成的字典
    print(word)
    wordsort = sorted(word.items())  #使用sorted将字典,按照key排序。
    print(wordsort)
    

    dict011

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值