python 字典

字典dict

  • key value 键值对的数据集合
  • 可变的、无序的、key不重复

字典dict定义 初始化

  • d = dict() 或者 d = {}
  • dict(**kwargs) 使用name=value对初始化一个字典
  • dict(iterable,**kwarg) 使用可迭代对象和name= value对构造字典,不过可迭代对象的元素必须是一个二元结构 d = dict((1:'a'),(2:'b'))
  • dict(mapping,**kwarg) 使用一个字典构建另一个字典
  • d = {'a':10,'b':20,'c':None,'d':[1,2,3]}
  • 类方法dict.fromkeys(iterable,value)  d = dict.fromkeys(5)  或者 d = dict.fromkeys(5,0)

字典元素访问

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

  • 使用另一个字典的kv对更新本字典
  • key不存在,就添加
  • key存在,覆盖已经存在的key对应的值
  • 就地修改
d = {}
d.update(red=1)
d.update((('red',2),))
d.update({'red':3})
d

字典删除

pop(key[,default])

  • key存在,移除他,并返回他的value
  • key不存在,返回给定的default
  • default未设置,key不存在则抛出KeyError异常

popitem()

  • 移除并返回一个任意的键值对
  • 字典为empty,抛出KeyError异常

clear()

  • 清空字典

del语句

a = True
b = [6]
d = {'a': 1, 'b': b, 'c': [1,3,5]}
del a
del d['c'] # 删除了一个对象[1,3,5]?
del b[0] #根据索引删除
c=b
del c
del b
b = d['b']
  • del a['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,既kv对

for item in d.items():
    print(item)

for item in d.items():
    print(item[0],time[1])

for k,v in d.items():
    print(k,v)

for k,_ in d.items():
    print(k)

for _,v in d.items():
    print(v)

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

  • Dictionary view对象,可以使用len()、iter()、in操作
  • 字典的entry的动态试图,字典变化,试图将反映出这些变化
  • keys返回一个类set对象,也就是可以看做一个set集合。如果values都可以hash,那么items也可以看做是set对象

字典的遍历和移除

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

错误的做法

d = dict(a=1,b=2,c='abc')
for k,v in d.items():
    d.pop(k)  #异常

d = dict(a=1,b=2,c='abc')
while len(d): #相当于清楚,不如clear
    print(d.popitem())

d = dict(a=1,b=2,c='abc')
while d:
    print(d.popitem())

 正确的做法

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

字典的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'}
原文地址:https://www.cnblogs.com/xzkzzz/p/11202746.html