python基础知识之字典的建立、简单操作、格式化字符串

1.字典的创立和使用

映射是通过名字来引用值的数据结构,字典是python中唯一内建的映射类型。字典有键和对应的值构成键-值对(又叫项),键和值用冒号 (:) 隔开,项之间用逗号 (,) 隔开,整个字典用大括号括起来,空字典则为{}。字典中的值没有特殊的顺序,但是存放在一个特定的键下,键可以是数字、字符串、元组。

>>> phonebook={'wang':'1234','cui':'2345'}
>>> 

我们可以用列表建立一个小型的电话号码数据库,如下

>>> name=['wang','cui']
>>> number=['000','111']
>>> number[name.index('cui')]
'111'
>>> 

虽然这种办法可行,但是不实用。

1.1 dict 函数 

   法 1:
   用 dict 函数,通过(键,值)对的序列建立字典。

>>> items=[('name','wang'),('number','1234')]
>>> d=dict(items)
>>> d
{'name': 'wang', 'number': '1234'}
>>> d['name']
'wang'
>>> items=[('name','wang'),('number','1234'),('age','25')]
>>> d
{'name': 'wang', 'number': '1234','age':'25'}
>>> 

    法2:
    dict 函数通过关键字参数创建字典,如下      

>>> d=dict(name='wang',number='1234')
>>> d
{'number': '1234', 'name': 'wang'}
>>> 

1.2 基本的字典操作 

字典的基本行为与列表类似:

-  len(d) 返回字典中的项的数量;
   
-  d[k] 返回关联到键 k 上的数值;
     
-  d[k] =v 将值 v 关联到键 k 上;   
     
-  del d[k] 删除键为 k 的项;

-  k in d 检查 d 中是否含有键为 k 的项;
       
 

>>> d=dict(name='wang',number='1234')
>>> d
{'number': '1234', 'name': 'wang'}
>>> len(d)
2
>>> d['number']
'1234'
>>> d['age']=25
>>> d
{'age': 25, 'number': '1234', 'name': 'wang'}
>>> del d['age']
>>> d
{'number': '1234', 'name': 'wang'}
>>> 'age' in d
False
>>> 'name' in d
True
>>> 'number' in d
True
>>> 

1.2.1 字典和列表的区别 

  1. 键类型:字典的键是唯一的,但是可以为任意不可变类型,例如整型、浮点型、字符串、元组。
              
  2. 自动添加:即使键起初在字典中不存在,也可以通过给它赋值,建立新的项。
            
  3. 成员资格:字典中的成员资格查找的是键,不是值,列表中的是查找值,而不是索引。
>>> x=[]
>>> x[42]='bar'

Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    x[42]='bar'
IndexError: list assignment index out of range
>>> x={}
>>> x['age']='25'
>>> x
{'age': '25'}
>>> 

字典示例:
                

#一个简单的数据库
#字典使用人名作为键。每个人用另一个字典来表示,其键‘phone’和‘addr’分别表示他们的电话号码和地址
people={
    'Alice':{
        'phone':'2341',
        'addr':'foo drive 23'
        },
    'Beth':{
        'phone':'9012',
        'addr':'bar street 43'
        },
    'Cecil':{
        'phone':'3158',
        'addr':'baz avenue 90'
        }
}
    #针对电话号码和地址使用的描述性标签,会打印输出的时候用到
labels={
        'phone':'phone number',
        'addr':'address'
        }

name=raw_input('Name:')
    #查找电话号码还是地址
request=raw_input('Phone number(p) or address(a)?')

    #使用正确的键
if request =='p':key='phone'
if request =='a':key='addr'

    #如果名字是字典中的有效键才打印信息
if name in people:print "%s's %s is %s." %\
    (name,labels[key],people[name][key] 
                      )

运行结果为:


>>> ================ RESTART================ 
>>> 
Name:Cecil
Phone number(p) or address(a)?p
Cecil's phone number is 3158.
>>> ================= RESTART ===============
>>> 
Name:Beth
Phone number(p) or address(a)?a
Beth's address is bar street 43.
>>> 
   

1.3 字典的格式化字符串                     

      在每个转换说明符中的 % 后面,可以加上键(用圆括号括起来),后面再跟上其它说明元素。

>>> phonebook={'wang':'1234','cui':'2345'}
>>> "wang 's number is %(wang)s " % phonebook
"wang 's number is 1234 "
>>> "wang 's number is % (wang)s" % phonebook

Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    "wang 's number is % (wang)s" % phonebook
ValueError: unsupported format character '(' (0x28) at index 20   
>>> "wang 's number is %('wang')s " % phonebook

Traceback (most recent call last):
  File "<pyshell#31>", line 1, in <module>
    "wang 's number is %('wang')s " % phonebook
KeyError: "'wang'"
>>>            

注意:%(键)s ,中只是用键名,而且 % 后面跟的字符之间没有空格。
                                                                   
        
                      

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值