《疯狂Python》学习第5课

2.4 使用字典

    字典也是Python提供的一种常用的数据结构,它用于存放具有映射关系的数据。

2.4.1 字典入门

    为了保存具有映射关系的数据, Python 提供了字典,字典相当于保存了两组数据, 其中一组数据是关键数据,被称为key ; 另一组数据可通过key来访问,被称为value。
    字典中的key 是非常关键的数据,而且程序需要通过key 来访问value,因此字典中的key不允许重复。

2.4.2 创建字典

    程序既可使用花括号语法来创建字典,也可使用dit()函数来创建字典。
    在使用花括号语法创建字典时,花括号中应包含多个key-value 对, key 与value之间用英文冒号隔开;多个key-value对之间用英文逗号隔开。代码示例:

scores={"语文":90,"数学":67,"政治":89,"地理":78}
print(scores)#输出结果:{'语文': 90, '数学': 67, '政治': 89, '地理': 78}
print(type(scores))#输出结果<class 'dict'>
#使用元组无作为dict的key
dict2 = { (20, 30): 'good ’ , 30 :’ bad'}
print(dict2)#输出结果:{(20, 30): 'good ’ , 30 :’ bad'}

    还可通过为diet 指定关键字参数创建字典,此时字典的key不允许使用表达式。代码示例:

dict6 = dict(spinach = 1.39, cabbage= 2.59)
print(dict6)#输出结果:{'spinach': 1.39, 'cabbage': 2.59}

2.4.3 字典的基本用法

    key是字典的关键数据,因此程序对字典的操作都是基于key的。Python提供以下几种方法:

  • 通过key访问value 。
  • 通过key添加key-value对。
  • 通过key删除key-value对。
  • 通过key修改key-value对。
  • 通过key判断指定key-value对是否存在。

    通过key 访问value 使用的也是方括号语法,此时在方括号中放的是key。代码示例:

scores={"语文":90,"数学":67,"政治":89,"地理":78}
print(scores['语文'])#输出结果:90

    如果要为diet 添加key-value对,只需为不存在的key 赋值即可。程序示例:

scores={"语文":90,"数学":67,"政治":89,"地理":78}
scores['体育']=99
print(scores)#输出结果:{'语文': 90, '数学': 67, '政治': 89, '地理': 78, '体育': 99}

    如果要删除宇典中的key- value对,则可使用del语句。代码示例:

scores={"语文":90,"数学":67,"政治":89,"地理":78}
del scores['语文']
print(scores)#输出结果:{'数学': 67, '政治': 89, '地理': 78}

    如果对diet 中存在的key-value对赋值,新赋的value就会覆盖原有的value,这样即可改变diet中的key-value对。代码示例:

scores={"语文":90,"数学":67,"政治":89,}
scores['语文']='优秀'
print(scores)#输出结果:{'语文': '优秀', '数学': 67, '政治': 89}

    如果要判断字典是否包含指定的key ,则可以使用in或not in 运算符。需要指出的是,对于diet而言,in或not in 运算符都是基于key来判断的。代码示例:

scores={"语文":90,"数学":67,"政治":89,}
print('语文' in scores,"数学" not in scores)
#输出结果:True False

2.4.4 字典的常用方法

    Python提供dict的几种有关方法:
    clear()用于清空宇典中所有的key-value对。代码示例:

scores={"语文":90,"数学":67,"政治":89,}
scores.clear()
print(scores)#输出结果:{}

    get()方法其实就是根据key来获取value ,如果使用get()方法切问不存在的key,该方法会简单地返回None,不会导致错误。代码示例:

scores={"语文":90,"数学":67,"政治":89,}
print(scores.get('语文'))#输出结果:90
print(scores.get('体育'))#输出结果:None

    update()方法可使用一个字典所包含的key-value对来更新己有的字典。在执行update()方法时,如果被更新的字典中己包含对应的key-value对, 那么原value会被覆盖:如果被更新的字典中不包含对应的key-value 对, 则该key-value对被添加进去。

scores={"语文":90,"数学":67,"政治":89,}
scores.update({"语文":100,'体育':99})
print(scores)#输出结果:{'语文': 100, '数学': 67, '政治': 89, '体育': 99}

    items()、keys()、values()分别用于获取字典中的所有key-value 对、所有key、所有value 。这三个方法依次返回diet_items 、diet_keys 和diet_values对象,Python不希望用户直接操作这几个方法,但可通过list()函数把它们转换成列表。如下代码示范了这三个方法的用法。

cars = {'BMW':8.5 ,'BENS':8.3,'AUDI':7.9}
#获取字典中所有的key-value 对, 返回一个dict_items 对象
ims =cars.items ()
print (type(ims ))
#将dict_items 转换成列表
print(list(ims) )
#访问第2 个key - value 对
print(list(ims)[1])
#获取字典中所有的key , 返回一个dict keys 对象
kys = cars.keys ()
print(type(kys))
#将dict keys 转换成列表
print(list(kys) )
#访问第2 个key
print(list(kys)[1])
#获取字典中所有的value , 返回一个dict_values 对象
vals =cars.values ()
#dict values 转换成列表
print(type(vals)) # (8 . 5, 8 . 3, 7.9]
#访问第2 个v alue
print(list(vals)[1])

    输出结果:

<class ‘dict_items’>
[(‘BMW’, 8.5), (‘BENS’, 8.3), (‘AUDI’, 7.9)]
(‘BENS’, 8.3)
<class ‘dict_keys’>
[‘BMW’, ‘BENS’, ‘AUDI’]
BENS
<class ‘dict_values’>
8.3

    pop()方法用于获取指定key 对应的value ,并删除这个key-value对。代码示例:

scores={"语文":90,"数学":67,"政治":89,}
#scores.update({"语文":100,'体育':99})
print(scores.pop('语文'))#输出结果:90
print(scores)#输出结果:{'数学': 67, '政治': 89}

    popitem()方法用于随机弹出字典中的一个key-value对。代码示例:

scores={"语文":90,"数学":67,"政治":89,}
print(scores.popitem())#输出结果:
print(scores)#输出结果:{'语文': 90, '数学': 67}

popitem 弹出的就是一个元组,因此程序完全可以通过序列解包的方式用两个变量分别接收key 和value。代码示例:

scores={"语文":90,"数学":67,"政治":89,}
k,v=scores.popitem()
print(k,v)#输出结果:政治 89

    setdefault()方法也用于根据key来获取对应value 的值。setdefault()方法总能返回指定key 对应的value一一如果该key-value 对存在, 则直接返回该key 对应的value ;如果该keyvalue 对不存在,则先为该key设置默认的value,然后再返回该key 对应的value 。代码示例:

scores={"语文":90,"数学":67,"政治":89,}
print(scores.setdefault('语文'))
print(scores.setdefault('历史'))
print(scores)

    输出结果

90
None
{‘语文’: 90, ‘数学’: 67, ‘政治’: 89, ‘历史’: None}

    fromkeys()方法使用给定的多个key 创建字典,这些key 对应的value默认都是None ;也可以额外传入一个参数作为默认的value。代码示例:

#使用列表创建包含两个key 的字典
a_dict=dict.fromkeys(['a','b'])
print(a_dict)#输出结果:{'a': None, 'b': None}
#使用元组创建包含两个key 的字典,指定默认的value
b_dict=dict.fromkeys((13,17),'good')
print(b_dict)#输出结果:{13: 'good', 17: 'good'}

2.4.5 使用字典格式化字符串

    之前介绍过在格式化字符串时,如果要格式化的字符串模板中包含多个变量,后面就需要按顺序给出多个变量,这种方式对于字符串模板中包含少量变量的情形是合适的,但如果字符串模板中包含大量变量,这种按顺序提供变量的方式则有些不合适。可改为在宇符串模板中按key 指定变量, 然后通过字典为字符串模板中的key 设置值。

emp = '书名是:%(name)s , 价格是:%(price)010.2f , 出版社是:%(publish)s '
book ={ 'name':'疯狂Python 讲义', 'price': 88.9, 'publish':' 电子社' }
#使用字典为字符串模板中的key 传入值
print(temp%book)#输出结果:书名是:疯狂Python 讲义 , 价格是:0000088.90 , 出版社是: 电子社 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值