字典和结构化数据

第五章——字典和结构化数据

字典

  • 字典的索引被称为,键及其关联的值称为键-值。字典输入的时候要带花括号{},在使用的时候和列表一样使用中括号[]

    1
    2
    3
    >>> myCat={'size':'fat','color':'gray'}
    >>> myCat['size']
    'fat'
  • 判断两个列表相同,要看两个列表中的对应位置的元素是否相同;判断两个字典是否相同,只需看两个字典的键-值是否相同即可

    1
    2
    3
    4
    5
    6
    7
    8
    >>> List=['a','b','c']
    >>> List1=['b','a','c']
    >>> List==List1
    False
    >>> dic={1:'a',2:'b',3:'c'}
    >>> dic1={2:'b',1:'a',3:'c'}
    >>> dic==dic1
    True
  • 如果访问字典中不存在的键,则会导致KeyError

字典中的一些方法

keys() values() items()

这三种方法分别对应字典的键、值、键-值对。返回的值是类似列表的值,不是真正的列表,不能被修改

1
2
3
4
5
6
7
>>> spam={'color':'red','age':18}
>>> spam.values()
dict_values(['red', 18])
>>> spam.keys()
dict_keys(['color', 'age'])
>>> spam.items()
dict_items([('color', 'red'), ('age', 18)])

如果想要得到一个列表,可以用list()进行转换

使用innot in依旧可以检查值是否在字典中,查询时如果不声明,默认按照keys()进行查询

1
2
3
4
5
6
7
8
9
>>> dic={1:'a',2:'b',3:'c'}
>>> 1 in dic.keys()
True
>>> 'a' in dic.values()
True
>>> 1 in dic
True
>>> (1,'a') in dic.items()
True

get()方法

get()有两个参数:要取得该值的键和一个备用的返回值。如果查询的键不在字典中,返回备用的值;否则返回该键对应的值。get()的默认返回值为$0$,如果不适用get()方法,在查询失败的时候会返回KeyError

setdefault()方法

setdefault()方法存在两个参数。相当于提供了一个if语句:如果字典中存在查找的键(第一个参数),返回键对应的值;否则将第一个参数作为键,第二个参数作为第一个参数对应的值加入到字典中

1
2
dic={1:'a',2:'b',3:'c'}
dic.setdefault(4,'d')

相当于:

1
2
3
dic={1:'a',2:'b',3:'c'}
if 4 not in dic:
dic[4]='d'

输出dic会发现输出均为:

1
{1: 'a', 2: 'b', 3: 'c', 4: 'd'}

使用setdefault()可以确保一个键的存在

可以利用setdefault()对字符串中出现的字符进行计数:

1
2
3
4
5
6
s='qwertyuioplkjhgfdsazxcvbnm'
count={}
for ch in s:
count.setdefault(ch,0)
count[ch]+=1
print(count)

输出结果为:

1
{'q': 1, 'w': 1, 'e': 1, 'r': 1, 't': 1, 'y': 1, 'u': 1, 'i': 1, 'o': 1, 'p': 1, 'l': 1, 'k': 1, 'j': 1, 'h': 1, 'g': 1, 'f': 1, 'd': 1, 's': 1, 'a': 1, 'z': 1, 'x': 1, 'c': 1, 'v': 1, 'b': 1, 'n': 1, 'm': 1}

pprint模块的简单应用

将上述代码导入pprint模块之后,使用pprint()输出:

1
2
3
4
5
6
7
import  pprint
s='qwertyuioplkjhgfdsazxcvbnm'
count={}
for ch in s:
count.setdefault(ch,0)
count[ch]+=1
pprint.pprint(count)

输出结果为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{'a': 1,
'b': 1,
'c': 1,
'd': 1,
'e': 1,
'f': 1,
'g': 1,
'h': 1,
'i': 1,
'j': 1,
'k': 1,
'l': 1,
'm': 1,
'n': 1,
'o': 1,
'p': 1,
'q': 1,
'r': 1,
's': 1,
't': 1,
'u': 1,
'v': 1,
'w': 1,
'x': 1,
'y': 1,
'z': 1}

pprint()对于包含列表等的字典特别有用

使用pformat()可以将pprint()输出的字典当做字符串来储存。以下两行代码是等效的:

1
2
pprint.pprint(count)
print(pprint.pformat((count)))

本文标题:字典和结构化数据

文章作者:执念

发布时间:2019年01月25日 - 17:01

最后更新:2019年02月14日 - 17:02

原始链接:https://blog.wzy1999.wang/learn/pyl-3/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------
0%