python学习笔记14(Dictionaries)

Charpter9

关于list(列表)与dictionary(字典)之间的比较:
list:是一组保持有序的线性的集合
dictionary:是一‘包‘数值,每一个数值都有它自己的标签

关于字典的几点知识(Key-Value Stores):

  • 字典是python中最强力的数据集合。
  • 字典帮助我们在python当中快速做类似数据库的操作。
  • 字典在其它的编程语言当中有不同的名称,例如在Perl/PHP当中称作associate arrays,在JAVA中称作properties or map or hashmap,在C#/,net中称作property bag

知识点1:
关于字典的特点

  • 列表是根据其列表中的位置为其编制索引
  • 字典就像一个包一样,里面的东西是没有顺序和规律可循的
  • 所以字典中内容的索引就是lable/tag/key
purse = dict()  #新建一个空的字典
purse['money'] = 12  #money就是key/lable,12就是value,就是key-value
purse['candy'] = 3
purse['tissues'] = 75
print(purse)
print(purse['money'])
print(purse['candy'])

输出结果为:
{‘money’: 12, ‘candy’: 3, ‘tissues’: 75}
12
3

注意:字典是可以被改变的,list也是可以被改变的,字符串不可以!!!
接上一条程序:

purse['money'] = purse['candy'] + 2
print(purse['money'])
print(purse['candy'])

输出结果为:
5
3

字典的默认输出顺序是不可预计的,也就是是乱序的!!这点可以与list进行对比,list默认有先后顺序。如果要进行类比的话,list当中的[0][1]就相当于dictionaries中的[‘money’]/[‘candy’]

知识点2:
Dictionary Literals(Constants)

  • 可以用大括号来新建一个空字典
  • 字典内容通常用大括号来写,当中包含Key-Value对子
dict1 = {}
print (dict1)

dict2 = {'Gary':1 , 'Curry':2 , 'Durant':3}
print(dict2)

输出结果为:
{}
{‘Gary’: 1, ‘Curry’: 2, ‘Durant’: 3}

知识点3:
字典的报错:

  • 如果引用一个不在字典当中的key会报错。
  • 可以用in来看是否这个key在字典当中。
  • 例如:
ccc = dict()
print('cesv' in ccc)  #注意这里写成'cesv'而不是ccc['cesv']

输出结果为:
False
这就引出了本届增补人物名字的代码内容。

知识点4:
histogram logic(直方图逻辑结构)

aaa = dict()
names = ['Gary' , 'Curry' , 'Gary' , 'Durant' , 'Cousins' , 'Durant']
for name in names: #遍历列表
    if name not in aaa:
        aaa[name] = 1  #如果列表中没有相应内容,那么增加它
    else:
        aaa[name] = aaa[name] + 1  #如果列表中已经有相应内容,那么对它做些什么
print(aaa)

输出结果为:
{‘Gary’: 2, ‘Curry’: 1, ‘Durant’: 2, ‘Cousins’: 1}

知识点5:
字典的一种方法——get(name , default)
主要作用是用于判断给定的key是否在字典当中,如果在,返回key对应的value,如果不在,返回第二个参数default。

'''
The get() method of Dictionary
'''
bbb = dict()
print(type(bbb))
print(dir(bbb))

举例说明,接上例:

aaa = dict()
names = ['Gary' , 'Curry' , 'Gary' , 'Durant' , 'Cousins' , 'Durant']
for name in names: #遍历列表
    if name not in aaa:
        aaa[name] = 1
    else:
        aaa[name] = aaa[name] + 1
print(aaa)
x = aaa.get('Gary' , 0)
y = aaa.get('Tompson' , 0)
print(x , y)

输出结果为:
{‘Gary’: 2, ‘Curry’: 1, ‘Durant’: 2, ‘Cousins’: 1}
2 0

为什么要是用get()呢? 因为这样的话,如果碰到不存在与字典中的元素,会自动赋值,而不是报错了。

除此之外,上例的功能实现过程可以得到简化:

aaa = dict()
names = ['Gary' , 'Curry' , 'Gary' , 'Durant' , 'Cousins' , 'Durant']
for name in names: #遍历列表
    aaa[name] = aaa.get(name , 0) + 1
print(aaa)

知识点6:
用for loop 来遍历字典:
前面我们讲过了用for循环来处理字符串、列表、文件,同样,for loop 可以用来处理字典。

'''
实现功能,用for来遍历字典
'''
count = {'Gary':1  , 'Curry':2 , 'Durant':3}
#print(count)
for key in count:
    print(key , count[key])

需要注意的是,虽然字典是无序的,但是同样可以通过key来进行遍历。

知识点7:
可以通过字典的method来检索它的key和value。

'''
实现功能,用method检索字典内容
'''
jjj = {'a':1 , 'b':2 , 'c':3}
#print(jjj)
list = list(jjj)  #可以将字典转化为列表
print(list)  #但是列表只显示字典的key,并且同样是乱序的。
print(type(list))

输出结果为:
[‘a’, ‘b’, ‘c’]
<class ‘list’>
以上是将字典转化为列表。

list = jjj.keys()
print(jjj.keys())
print(list)
print(type(list))
print(jjj.values())
a = jjj.items()
print(a)
print(type(a))  #本质上讲,这个输出结果是一个由3个元组组成的列表。

输出结果为:
dict_keys([‘a’, ‘b’, ‘c’])
dict_keys([‘a’, ‘b’, ‘c’])
<class ‘dict_keys’>
dict_values([1, 2, 3])
dict_items([(‘a’, 1), (‘b’, 2), (‘c’, 3)])
<class ‘dict_items’>

通过以上元组的概念,我们可以引入一个附加内容:可以通过两个迭代变量来实现对字典的key和value的同时遍历。

aaa = {'a':2 , 'b':3 , 'c':1}
for key , value in aaa.items():
    print(key , value)

输出结果为:
a 2
b 3
c 1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值