《Python编程快速上手》读书笔记5:字典和结构化数据(一)

本文是《Python编程快速上手》读书笔记,重点讲解了Python中的字典数据类型,包括字典的定义、键值对、访问方式、字典方法如key()、values()和items(),以及get()和setdefault()方法的用法。此外,还介绍了如何利用pprint模块实现字典的漂亮打印。
摘要由CSDN通过智能技术生成

本系列笔记只记录python3和C语言的差异之处

1 字典数据类型

字典和列表类似,是许多值的集合,用花括号{}表示。字典的数据以“键:值”对的形式存在,键类似于列表的下标,但却可以自定义内容且显式存在,而不像列表那样是隐式的以0开始的整数。

  • 键可以是你想要的任意值
  • 字典没有顺序的概念,比较两个字典是否一样时,不关注顺序,只关注键值对的内容是否一致
  • 访问不存在的键会导致KeyError错误
  • 可以用方括号[]访问的方式向字典中添加新的键值对
>>> data = {'name':'hanchen', 'age':25, 10:'stat'}
>>> data['name']
'hanchen'
>>> data['age']
25
>>> data[10]
'stat'
>>> newdata = {10:'stat', 'name':'hanchen', 'age':25}
>>> newdata == data
True
>>> data = {'name':'hanchen', 'age':25}
>>> data['stat']
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    data['stat']
KeyError: 'stat'
>>> data['stat'] = 'good'
>>> data
{'name': 'hanchen', 'age': 25, 'stat': 'good'}

有三个字典方法key()、values()和items(),分别返回字典的键、值和键值对的类似列表形式。当然也可以用list()强制获得一个列表形式。

>>> data.keys()
dict_keys(['name', 'age', 'stat'])
>>> data.values()
dict_values(['hanchen', 25, 'good'])
>>> data.items()
dict_items([('name', 'hanchen'), ('age', 25), ('stat', 'good')])
>>> list(data.values())
['hanchen', 25, 'good']
>>> list(data.items())
[('name', 'hanchen'), ('age', 25), ('stat', 'good')]

可以用for循环来遍历这三个字典方法的返回值,当然也可以使用in和not in操作符检查某个键或者值是否在字典中。

>>> for i in data.keys():
	print(i)
name
age
stat
>>> for i in data.values():
	print(i)
hanchen
25
good
>>> for i, k in data.items():
	print(i, k)
name hanchen
age 25
stat good
>>> 'hanchen' in data.keys()
False
>>> 'hanchen' in data.values()
True
>>> 'name' not in data
False

get()方法,可以取得字典中一个键(参数1)的值,并且在没有此键的情况下,返回一个备用值(参数2),此方法不改变字典值。
setdefault()方法,类似于get()方法,检查一个键是否存在,如果存在返回键值,如果不存在,设置它的值为参数2,此方法会改变字典值。

>>> data = {'name': 'hanchen', 'age': 25, 'stat': 'good'}
>>> data.get('addr', 'shanxi')
'shanxi'
>>> data
{'name': 'hanchen', 'age': 25, 'stat': 'good'}
>>> data.setdefault('addr', 'shanxi')
'shanxi'
>>> data
{'name': 'hanchen', 'age': 25, 'stat': 'good', 'addr': 'shanxi'}

有一个使用setdefault()方法的小程序,可以统计一个字符串中每个字符出现的字数。

message = 'it was a bright cold day in April,and the clocks were striking thirteen.'
count = {}
for c in message:
    count.setdefault(c, 0)
    count[c] = count[c] + 1
print(count)

执行结果

{'i': 7, 't': 6, ' ': 12, 'w': 2, 'a': 4, 's': 3, 'b': 1, 'r': 5, 'g': 2, 'h': 3, 'c': 3, 'o': 2, 'l': 3, 'd': 3, 'y': 1, 'n': 4, 'A': 1, 'p': 1, ',': 1, 'e': 5, 'k': 2, '.': 1}
2 漂亮打印

在pprint模块中有pprint()和pformat()函数,可以进行一种漂亮的字典打印。将前面的例子最后的打印函数修改为pprint.pprint(),看下效果。

import pprint
message = 'it was a bright cold day in April,and the clocks were striking thirteen.'
count = {}
for c in message:
    count.setdefault(c, 0)
    count[c] = count[c] + 1
pprint.pprint(count)

执行效果

{' ': 12,
 ',': 1,
 '.': 1,
 'A': 1,
 'a': 4,
 'b': 1,
 'c': 3,
 'd': 3,
 'e': 5,
 'g': 2,
 'h': 3,
 'i': 7,
 'k': 2,
 'l': 3,
 'n': 4,
 'o': 2,
 'p': 1,
 'r': 5,
 's': 3,
 't': 6,
 'w': 2,
 'y': 1}

pformat()可以将要打印的内容格式化成上面的整齐字符串,但是并不输出到屏幕上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值