Python成长之路 — 字典

一、字典的定义与创建

  字典是Python中唯一内建的映射类型。你可以将其想象成书本的目录,章节名称代表“key”,页码则代表“value”。书本的目录本质上是也是字典。

  1、字典的创建

  (1)下面通过一个实例引入字典:

  使用列表构建包含姓名和电话号码的数据库

names = ['aa','bb','cc','dd','ee','ff']
numbers = [123,456,789,'0121',131415,161718]
name = input("please enter your name :")
print(numbers[names.index(name)])

  使用字典构建包含姓名和电话号码的数据库

info = {
    'aa':123,
    'bb':456,
    'cc':789,
    'dd':"0121",
    'ee':131415,
    'ff':161718
}
print(info[input("please enter your name :")])

  字典由多个键值对组成,键值对也称为“项”,字典的特性:键是唯一的,值不唯一

  (2) 使用dict函数创建字典

items =[('zhangsan',18),('lisi',19),('wangwu',20)]
item = dict(items)
print(item)

  2、字典常用基本操作

  字典基本操作:len,d[key],d[k]=v,del d[k],k in d

#计算字典键值对数量
test = {
    'aa':123,
    'bb':456,
    'cc':789,
    'dd':"0121",
    'ee':131415,
    'ff':161718
}
print(len(test))
#d[key],获取指定key的值
print(test['bb'])
#d[k]=v,修改指定key的value
test['ff']=111111111
print(test)
#del d[k] 删除指定键的元素
del(test['ff'])
print(test)
#k in d,查找某个键是否在字典中存在
print('dd' in test)
#简单数据库:每个人的手机号和地址
people={
    'zhangsan':{
        'phone':13966137218,
        'addr':'上海市浦东新区源深路419号国际华城'
    },
    'lisi':{
        'phone':13511983857,
        'addr':'上海市松江区人民南路323号'
    },
    'wanwu':{
        'phone':18339484093,
        'addr':'上海市宝山区韶山路221号'
    }
}
#手机号及地址使用的描述性标签,用于打印输出
labels ={
    'phone':'phone number',
    'addr':'address'
}
name =input("Your name :")
#查询手机号还是地址
req=input('Phone number please enter \'p\';Address please enter \'a\'')
if req == 'p':
    key='phone'
elif req == 'a':
    key='addr'
else:
    print("Sorry,your enter is wrong")
if name in people: print ("%s 's %s is %s ." % (name,labels[key],people[name][key]))

  3、字典基本方法

  字典常用方法:clear,copy,fromkeys,get,items,keys,pop,popitem,setdefault,update,values 

  (1) clear  清空字典

x={}
y=x
x['key']='value'
print(x)
print(y)
x.clear()
print(y)
"""
{'key': 'value'}
{'key': 'value'}
{}
"""

 (2) copy

#copy  返回一个具有相同键值对的新字典(浅复制)
a={'a':1,'b':['2','3','4']}
b=a.copy()
#若在副本中修改值,原字典不受影响
b['a']='aaa'
#若在副本中增删值,原字典会跟着改变
b['b'].remove('4')
print(a)
print(b)
"""
{'a': 1, 'b': ['2', '3']}
{'a': 'aaa', 'b': ['2', '3']}
"""

 

#deepcopy  深复制,原字典改变,副本不变;副本改变,原字典也不变;原字典与副本都单独开辟了内存空间
from copy import deepcopy
c={'a':1,'b':['2','3','4']}
d=deepcopy(c)
c["b"].append('5555555')
print(c)
print(d)
print(id(c))
print(id(d))
e=deepcopy(c)
e["b"].append("666666666666")
print(c)
print(e)
print(id(c))
print(id(e))
"""
{'a': 1, 'b': ['2', '3', '4', '5555555']}
{'a': 1, 'b': ['2', '3', '4']}
38559608
38597040
{'a': 1, 'b': ['2', '3', '4', '5555555']}
{'a': 1, 'b': ['2', '3', '4', '5555555', '666666666666']}
38559608
38597112

"""

  (3)  fromkeys

#fromkeys  使用指定的键创建新字典,每个键对应的value默认为None
print({}.fromkeys(['zhangsan','lisi']))
#{'zhangsan': None, 'lisi': None}
#自己提供默认值
print({}.fromkeys(['zhangsan','lisi'],'666'))
"""
#fromkeys  使用指定的键创建新字典,每个键对应的value默认为None
print({}.fromkeys(['zhangsan','lisi']))
#{'zhangsan': None, 'lisi': None}
#自己提供默认值
print({}.fromkeys(['zhangsan','lisi'],'666'))
"""

  (4)get

#get   根据key,获取value。key不存在时,返回None(可自定义默认值替换None)而不会报错b
age ={ 'zs':12, 'ls':15, 'ww':18 } print(age.get('ww')) print(age.get('zl')) print(age.get('zl','NA')) """ 18 None NA """

  (5)items

#items  以列表的方式返回字典的所有键值对
pp ={
    'zs':12,
    'ls':15,
    'ww':18
}
print(pp.items())
"""
dict_items([('zs', 12), ('ls', 15), ('ww', 18)])
"""

  (6) keys values

#keys  以列表的形式返回字典的所有key;values  返回字典的所有values
print(pp.keys())
print(pp.values())
"""
dict_keys(['zs', 'ls', 'ww'])
dict_values([12, 15, 18])
"""

  (7)  pop

#pop  弹出(删除)字典中指定key的元素
pp.pop("zs")
print(pp)
pp.pop("ls")
print(pp)
"""
{'ls': 15, 'ww': 18}
{'ww': 18}
"""

  (8)  popitem

#popitem  随机弹出字典中的某个项
qq ={
    'zs': 12,
    'ls': 15,
    'ww': 18
}
qq.popitem()
print(qq)
"""
{'zs': 12, 'ls': 15}
"""

  (9)  setdefault

#setdefault  获取字典中某个Key的value,类似于get,若key不存在,则创建指定默认值
print("********************")
t={}
t.setdefault("name","zhangsan")
print(t)
print(t.setdefault("name"))

 

   (10)  update

#update  将两个字典合并,如果key相同,则更新原字典
m={
    'a':1,
    'b':2
}
n={
    'c':3,
    'd':4
}
m.update(n)
print(m)

d={
    'tittle':'Python Web Site',
    'url':'http://www.python.org',
    'changed':'DDD'
}
x={'tittle':'Python Language Website'}
d.update(x)
print(d)
"""
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
{'tittle

 

 问题思考:请详细分析以下很“low”的代码。

x={}
y=x
print(x)
print(y)
x['a']=1
print(x)
print(y)
x={}
print(x)
print(y)

 

posted @ 2017-06-06 18:18  fee先生  阅读(239)  评论(0编辑  收藏  举报