本系列笔记只记录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()可以将要打印的内容格式化成上面的整齐字符串,但是并不输出到屏幕上。