首页 > 编程语言 > 详细

python字典(dict)

时间:2020-04-05 21:10:38      阅读:79      评论:0      收藏:0      [点我收藏+]

1、字典dict定义 初始化
  key-value键值对的数据的集合,可变、无序、key不重复(哈希、唯一)
  1> d = dict() 或者 d = {}

# -*- coding:utf-8 -*-
# version:python3.7

d1 = dict()
d2 = {}
print(d1)
print(d2)

执行结果:
{}
{}

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

d1 = dict(a=1,b=2,c=3)    #或着:d1 = {‘a‘:1,‘b‘:2,‘c‘:3}
print(d1)

执行结果:
{a: 1, b: 2, c: 3}

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

d = dict(((a,1),(b,2),(c,3)))    #或者:d = dict([(a‘,1),(b‘,2),(c‘,3)])
print(d)

执行结果:
{a: 1, b: 2, c: 3}

  4>dict(mapping, **kwarg)使用一个字典构建另一个字典

l1 = [3,4]
d1 = dict(a=1,b=2,c=l1)
d2 = dict(d1)
print(d1)
print(d2)
print(d2 == d1)
print(d2 is d1)
l1.append(5)
print(d1)
print(d2)

执行结果: {
a: 1, b: 2, c: [3, 4]} {a: 1, b: 2, c: [3, 4]} True False
{‘a‘: 1, ‘b‘: 2, ‘c‘: [3, 4, 5]}
{‘a‘: 1, ‘b‘: 2, ‘c‘: [3, 4, 5]}

  5>类方法dict.fromkeys(iterable, value=None)

d1 = dict.fromkeys(range(5))
d2 = dict.fromkeys(range(5),0)
print(d1)
print(d2)

执行结果:
{0: None, 1: None, 2: None, 3: None, 4: None}
{0: 0, 1: 0, 2: 0, 3: 0, 4: 0}

  6>key可哈希、不重复、可去重

d = {a:1,a:2}
print(d)

执行结果:
{a: 2}

 


2、字典元素的访问
  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

# -*- coding:utf-8 -*-
# version:python3.7

d1 = dict(a=1,b=2,c=3,d=4)
print(d1)
print(d1[a])       # 不存在则抛出 KeyError 异常
print(d1.get(b))
print(d1.get(e))   # 不存在返回None
print(d1.setdefault(d,e))    # 返回key对应的value值
print(d1.setdefault(e,5))      # key值不存在,创建kv对
print(d1)

执行结果:
{a: 1, b: 2, c: 3, d: 4}
1
2
None
4
5
{a: 1, b: 2, c: 3, d: 4, e: 5}

 


3、字典的增加和修改
  [key] = value
    将key对应的值修改为value
    key不存在添加新的kv对
  update([other])  →  None
    使用另一个字典的kv对更新本字典
    key不存在,就添加
    key存在,覆盖已经存在的key对应的值
    就地修改

# -*- coding:utf-8 -*-
# version:python3.7

d1 = dict(a=1,b=2,c=3,d=4)
print(d1)
d1[d] = 3  # 将key对应的值修改为value
print(d1)
d1[e] = 4  # key不存在添加新的kv对
print(d1)
d1.update({b:3,e:1})
print(d1)

执行结果:
{a: 1, b: 2, c: 3, d: 4}
{a: 1, b: 2, c: 3, d: 3}
{a: 1, b: 2, c: 3, d: 3, e: 4}
{a: 1, b: 3, c: 3, d: 3, e: 1}



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

# -*- coding:utf-8 -*-
# version:python3.7

d1 = dict(a=1,b=2,c=3,d=4)
print(d1)
d1.pop(d)
print(d1)
print(d1.pop(e,None))    # 不存在返回缺省值,可以判断key值是否存在
d1.popitem()               # 随机弹出
print(d1)
d1.clear()
print(d1)

执行结果:
{a: 1, b: 2, c: 3, d: 4}
{a: 1, b: 2, c: 3}
None
{a: 1, b: 2}
{}

  del语句

# -*- coding:utf-8 -*-
# version:python3.7

a = True
b = [2]
d = {a:1,b:b,c:[3,4]}
print(d)
del a       # 引用计数归零
del b[0]    # 删除成空列表
print(b)
c = b       # 引用计数加1
del d[c]
print(d)

执行结果:
{a: 1, b: [2], c: [3, 4]}
[]
{a: 1, b: []}

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

 


5、字典遍历
  for ... in dict
  遍历key
    for k in d:
      print(k)

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

# -*- coding:utf-8 -*-
# version:python3.7

d = dict(((a,1),(b,2),(c,3)))
for k in d:
    print(k)
print(* * 10)
for k in d.keys():    # 遍历key,建议使用d.keys()
    print(k)

执行结果:
a
b
c
**********
a
b
c

  遍历value
    for k in d:
      print(d[k])

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

    for v in d.values():
      print(v)

# -*- coding:utf-8 -*-
# version:python3.7

d = dict(((a,1),(b,2),(c,3)))
for k in d:
    print(d[k])
print(* * 10)
for k in d.keys():
    print(d.get(k))
print(* * 10)
for v in d.values():
    print(v)

执行结果:
1
2
3
**********
1
2
3
**********
1
2
3

  遍历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)

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

# -*- coding:utf-8 -*-
# version:python3.7

d = dict(((a,1),(b,2),(c,3)))
for item in d.items():
    print(item)
print(* * 10)
for item in d.items():
    print(item[0],item[1])
print(* * 10)
for k,v in d.items():
    print(k,v)

执行结果:
(a, 1)
(b, 2)
(c, 3)
**********
a 1
b 2
c 3
**********
a 1
b 2
c 3

 


6、总结
  Python3中,keys、values、 items方法返回一个类似一个生成器的可迭代对象,不会把函数的返回结果复制到内存中
    返回Dictionary view对象,可以使用len()、iter()、in操作
    字典的entry的动态的视图,字典变化,视图将反映出这些变化
    keys返回一一个类set对象,也就是可以看做一个set集合
    如果values都可以hash,那么items也可以看做是类set对象

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







python字典(dict)

原文:https://www.cnblogs.com/zyybky/p/12638920.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!