列表、字符串和字典是Python中最重要的3种数据类型,字典不仅支持整数索引,还支持其他类型的键(如字符串、元组等)索引。
当一系列只组合成数据结构,并通过编号来访问各个值时,用列表很管用。因为列表里索引位置按顺序排列,以编号为索引,像0,1,2...
而字典通过名称来访问各个值的数据结构,其中的值不按顺序排列,而是储存在键下,键可能是数、字符串或原则
name=["A","B","C"] # 创建列表name
number=["12","23","34"] # 为了建立小型数据库,存放姓名和号码. 创建列表number
number[name.index("B")] # 建立的是列表时,怎么查找某人的号码,就是这样输入
Out[35]: '23' #能行,但是麻烦
上述问题用字典来解决更容易,也简便
1、创建字典
number={"A":"12","B":"23","C":"34"} #字典以这种方式表示
number["B"]
字典由键和值组成,这种键-值称为项,上键中键为名字,是独一无二的,如“A”,“B”等;值为号码,无需独一无二,如“12”,“23”等。
每个键和值之间用冒号隔开,项之间用逗号隔开,整个字典放在花括号内。{}表示空字典。
用dict函数创建字典
item=[("name","liujun"),("age",42)]
a=dict(item)
a
Out[40]: {'age': 42, 'name': 'liujun'} # dict()创建函数
a['name']
Out[41]: 'liujun' #查阅字典
还可以用关键字调用dict函数 ,这是常用 用法
a=dict(name='lijun',age=42)
a
Out[42]: {'age': 42, 'name': 'lijun'}
2、对字典的操作
有len()、d[k]、d[k]=v、del d[k]和k in d等操作
a=dict(name='lijun',age=42)
len(a)
Out[2]: 2 #len返回字典中包含的项数
a["name"]
Out[3]: 'lijun' #返回与键“name”相关联的值
a["name"]='duxiaoxue'
a
Out[6]: {'age': 42, 'name': 'duxiaoxue'} #将值“duxiaoxue”关联到键“name”
del a["name"]
a
Out[8]: {'age': 42} # 删除键为“name”的项
a=dict(name='lijun',age=42)
"name" in a
Out[11]: True # name in a表示字典a是否包含键为name的项
注意:
即使字典中原来没有键(是个空字典),也可以赋值,会自动在字典中创建新项;但是对于列表,若不用append等方法,不能给没有的元素赋值。
字典表达式中k in d(d为字典)查找的是键而不是值;而v in L(L为列表)查找的是值,而不是索引。
a=[]
a[3]="lijuns"
IndexError: list assignment index out of range #列表不可给不存在的位置赋值
a={}
a[3]="lijuns"
a
Out[13]: {3: 'lijuns'} #字典可给不存在的位置赋值
一个数据库的例子:
people={"Alice":{"phone":"1234","addr":"龙虎街道"},"Beth":{"phone":"9102","addr":"河北街道"}}
# people包含两个字典:第一是将人名用作键的字典;第二是每个人都用字典表示。
lable={"phone":"phone number","addr":"address"}
# 电话号码和地址的描述性标签,在打印输出时使用这个标签
name=input("name")
request=input("phone number(p) or address(a)?")
# 问 要查询电话还是地址?
if request=="p":key="phone"
if request=="a":key="addr"
#
if name in people:print("{}'s {} is {}.".format(name,lable[key],people[name][key]))
# 近当名字在字典里包含的键时才打印信息
nameBeth
phone number(p) or address(a)?a
Beth's address is 河北街道.