快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

Python内置数据结构——字典dict-创新互联

字典dict

创新互联是一家专业提供涟水企业网站建设,专注与网站制作、成都网站制作、H5高端网站建设、小程序制作等业务。10年已为涟水众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。

key-value 键值对的数据的集合

可变的,无序的,key不重复,可迭代

字典dict定义 初始化

  • d = dict() 或者 d = {}

  • dict(**kwargs)使用name = value对 初始化一个字典

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

  •             d = dict(((1,"a"), (2,'b'))) 或者 dict(([1,"2"],[2,"b"]))

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

  • d ={'a' : 10 , "b" : 20, "c" : None, 'd' : [1,2,3]}

  • 类方法dict.fromkeys(iterable , value)

  d = dict.fromkeys(range(5))    ->    {0: None, 1: None, 2: None, 3: None, 4: None}
  d = dict.fromkeys(rang(5),0)    ->    {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}

字典元素的访问

  • dict[key]

            返回key对应的值value

            key不存在抛出KeyError异常

  • dict.get(key[,default])

            返回key对应的值value

            key不存在返回缺省值,如果没有设置缺省值就返回None

  • dict.setdefault(key[,default])

            返回key对应的值value

            key不存在,添加k=v对,value设置为default,并返回default,如果default没有设置,缺省为None

字典增加和修改

  • dict[key] = value

            将key对应的值修改为value

            key不存在将添加新的k=v对

  • dict.update([other]) -> None

            使用另个字典的kv 对更新本字典

            key不存在,就添加

            key存在,覆盖已经存在的key对应的值

            就地修改

d.update(red = 1)
d.update((('red' , 2),))
d.update({'red' : 3})

字典删除

  • dict.pop(key [, default])

            key存在,移除它,并返回它的value

            key不存在,返回给定的default

            default未设置,key不存在则抛出keyError

  • dict.popitem()

            移除并返回一个任意的键值对

            字典为empty,抛出KeyError异常

  • dict.clear()

            清空字典

del 语句

 a = True
 b = [6]
 d = {'a':1,'b':b,'c':[1,3,4]}
 del a
 del d['c'] # 并没有删除对象[1,3,4],只是他的引用次数减一了
 del b[0] # b这个变量之前已经被del掉

#del d['c'] 看着像删除了一个对象,本质上减少了一对象的引用,del实际上删除的是名称,而不是对象

字典遍历


for ... in dict:

遍历key

for k in d:
    print(k)
    
for k in d.keys():
    print(k)

遍历value

for k in d:
    print(d[k])
    
for k in d.keys():
    print(d.get(k))
    
for v in d.values():
    print(v)

遍历item,即k=v对

for item in d.items():  -> 返回有2个元素的元组tuple
    print(item)
    
for item in d.items():
    print(item[0],item[1])
    
for k,v in d.items():
    print(k,v)

字典遍历总结

  • python3 中,keys  values items方法返回一个类似一个生成器的可迭代对象,不会把函数的返回结果复制到内存中(不重复占用内存)

  • Dictionary view对象,可以使用len().iter(),in操作

  • 字典的entry的动态的视图,字典变化,视图反映出这些变化

  • keys返回一个类set对象,也就是可以看做一个set集合.如果values都可以hash,那么items也可以看做是类set对象

[了解]python2 中,上面的方法会返回一个新的列表,占据新的内存空间.所以Python2 建议使用iterkeys,itervalues,iteritems版本,返回一个迭代器,而不是返回一个copy

字典遍历和移除

如何在遍历的时候移除元素

正确的做法:

d = dict(a =1,b = 2,c = 'abc')
keys = []
for k,v in d.items():
    if isinstance(v,str)
        keys.append(k) 创建一个k的列表
for k in keys:
    d.pop(k) # 移除c
print(d)

out:{'a': 1, 'b': 2}

错误的做法:

d = dict(a =1,b = 2,c = 'abc')
for k,v in d.items():
    d.pop(k) #异常( dictionary changed size during iteration)
    
while len(d): # 相当于清空,不如直接celar
    print(d.popitem())
    
while d:
    print(d.popitem())

字典的key

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

  • set 的元素就可以看做key , set 可以看做dict 的简化版

  • hashable 可哈希才可以作为key,使用hash()测试

  • d = {1:0 , 2.0:3 , "abc":None , ('hello' , 'world' , 'python'):'string' , b'abc' : '135'}

defaultdict

  • collections.defaultdict([default_factory[, ...]])

            第一个参数是default_factiory,缺省的是None,它提供一个初始化函数..当key不存在的时候,会调用这个工厂函数来生成Key对应的value

import random
d1 = {}
for k in 'abcdef':
    for i in range(random.randint(1,5)):
        if k not in d1.keys():
            d1[k] = [] # d1 内增加key:[]
        d1[k].append(i) # key对应的value添加值
print(d1)

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

OrderedDict

  • collections.OrderedDict([items])

            key并不是按照加入的顺序排列,可以使用OrderedDict记录顺序

            有序字典可以记录元素插入的顺序,打印的时候也是按照这个顺序输出打印

  • 应用场景

            加入使用了字典记录了N个产品,这些产品使用ID由小到大加入到字典中

            除了使用字典检索的遍历,有时候需要去除 ID, 但是希望是按照输入的顺序,因为输入顺序是有序的

            否则还需要重新把遍历到的值排序

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享名称:Python内置数据结构——字典dict-创新互联
文章来源:http://6mz.cn/article/dogose.html

其他资讯