Python数据结构字典-dict

字典的定义

  字典是key、value键值对的数据集合,字典是可变的、无序的、key值不重复

字典dict初始化

  d = dict()或者{},表示空字典

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

  dict(mapping) -> new dictionary initialized from a mapping object's;使用字典构建另一个字典

  dict(iterable) -> new dictionary initialized as if via:使用可迭代对象和name=value键值对构造字典,不过可迭代对象的元素必须是一个二元组,一个二元结构

示例:  

  d = dict(((1,'a'),(2,'b')))   d = dict(([1,'a'],[2,'b']),c=200)

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

#d1 = dict((('b','1'))) # 报错 ValueError: dictionary update sequence element #0 has length 1; 2 is required
#d1 = dict(((1,'a')))   # TypeError: cannot convert dictionary update sequence element #0 to a sequence

d = dict((('k','1'),('b','2')))
d = dict(('k','1'),) # 错误
d1 = dict((('k','1'))) #错误的
d1 = dict((('k','1'),)) #正确
d1 = dict([['a','a']])   #正确
d1 = dict((['a','a']))   #错误
d1 = dict((['a','a'],))   #正确

 

  类方法:dict.fromkeys(iterable,value)   value为填充值,不写默认使用None进行填充

  d = dict.fromkeys(range(4),20)

  d = dict.fromkeys(range(5))

  d = dict.fromkeys(('abcdef),100)

 

 

 

 

 

 

 1 str1 = "a1:1|a2:2|a3:3"
 2 lst1 = str1.split('|')
 3 dict1 = {}
 4 for k in range(len(lst1)):
 5     dic = dict([lst1[k].split(':')])
 6     dict1.update(dic)
 7 print(dict1)
 8 
 9 for i in lst1:
10     k,v = i.split(':')
11     dict1[k] = v 
12 print(dict1)
View Code

 

字典元素的访问

  d[key]:返回key对应值value,key不存在则爆出异常KeyError

  get(key,[default]):返回key对应的值,如果key不存在则返回缺省值,默认为None,可自行定义返回值

  setdefault(key [default]):返回key对应的值value,key不存在添加kv对,value设置为default,并返回default,如果default没有设置,缺省值为None

 

 字典的增加和修改

  d[key] = value:将key对应的值修改为value,key不存在则增加新的k/v对

  update([other]) ->None:使用另一个字典的kv对更新本字典,key不存在就添加,key存在则就覆盖原有的key对应的值,就地修改

 

 

字典删除

  pop(key[,default]):key存在则移除他,并返回他的value,key不存在返回给定的default值,default值不设置,key不存在则抛出异常

  popitem():移除并返回一个任意的键值对,字典为empty则抛出异常KeyError

  clear():清空字典

  del dict:删除对象引用

 

 

字典的遍历

  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)

    遍历key-value对,item:

      for item in d.items():

        print(item)

      for k,v in d.items():

        print(k,v)

      for _,v in d.items():

        print(v)

      for k,_ in d.items():

        print(k)

 

 

 

 

 

 遍历总结:

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

  字典的entry的动态视图,字典的变化,视图将反应出这些变化

  keys返回一个类set对象,可就是可以看做是一个set集合。如果values都可hash,那么items也可以看做类的se对象,取决于values值得类型,为可hash还是不可hash  

  

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

 

字典的遍历和移除

 字典在遍历自身的时候长度不能改变,否则抛异常,则需将需要删除keys取出来,迭代keys,再次使用pop('keys')进行删除

d = dict(a=1,b=2,c='123')
keys =[]
for k,v in d.items():
    if isinstance(v,str):
        keys.append(k)
print(keys)
for k in keys:
    d.pop(k)
print(d)

 

字典的key值

  key的要求和set元素要求一致,set元素可以看做key,set可以看做dict的简化版,可hash才能作为key,可使用hash()测试

 

defaultdict

  使用此函数,需from collections import defaultdict;collections.defaultdict([default_factory[,....])

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

 

d = {}
for i in 'abcdefg':
    for j in range(3):
        if i not in d.keys():
            d[i] = []
        d[i].append(j)
print(d)

 

import random
d1 = {}
for k in 'abcdef':
    for i in range(random.randint(1,10)):
        if k not in d1.keys():
            d1[k] = []
        d1[k].append(i)
print(d1)
from collections import defaultdict
import random  

d1 = defaultdict(list)

for i in 'abcdef':
    for j in range(random.randint(1,5)):
        d1[i].append(j)
print(d1)

 

OrderedDict

  collections.OrderedDict([items]):key并不是按照加入的顺序排列,Python3.6以上看到的是按照加入顺序排序的,实际是无序的,

  Python内部做了一些优化,3.6以下则是无序的,可以使用OrderedDict记录顺序。有序字典可以记录元素插入的顺序,打印的时候也是按照这个顺序输出打印

from collections import OrderedDict
import random 
d = {'a':1,'b':2,'c':3}
print(d)

keys = list(d.keys())
random.shuffle(keys)
print(keys)

old = OrderedDict()
for key in keys:
    old[key] = d[key]
print(old)
print(old.keys())

 

 

  

 

posted @ 2020-04-01 09:55  Alrenn  阅读(482)  评论(0)    收藏  举报