python之字典基础知识

一、字典是一种映射

<1>字典的概念

1.字典中下标几乎可以是任意类型
2.字典的下标称为 。 每个键都与一个值关联。
键值对(有时候也称一(item)):键值之间的关联
字典体现了键到值上的映射

<2>字典的构建与基本操作

1.dict函数新建一个不含任何项的字典
添加新项

d['one']  = 'two'

如果我们打印这个字典,可以看到一个键值对,以冒号分隔

>>> s
{'one':'two'}

2.字典中各项的顺序是不可预料的 即打印相同的字典得到字典中项的排序可能会不同
3.len函数
能够返回键值对的数量

>>> end = {'one':1,'two':2,'three':3}
>>> len(end)
3

in操作符可以判断是不是字典中的(值判断不了)

>>> 'one' in end
True 

当然,也可以判断值。可以用values方法,它会返回一个值集合,再用in操作符

>>> vals = end.values()
>>> 1 in vals
>>> True

二、直方图

现在给你一个问题,给定字符串,怎么计算每个字母出现的次数,用字典实现。
我们可以选择直方图(这是一个函数名称),它是一个统计学术语,表示一个计数器。

def histogram(str):
    d = dict()
    for c in str:
        if c not in d:
             d[c] = 1
        else:
             d[c] += 1
    return d              

例如:

>>> h = histogram('brnedaawxa')
>>> h
{'b': 1, 'r': 1, 'n': 1, 'e': 1, 'd': 1, 'a': 3, 'w': 1,'x': 1}

还有一个get函数 接受一个键以及一个默认值。如果键出现在字典中,get返回对应的值;否则它返回默认值。

>>> s = histogram('b')
>>> s
{'b': 1}
>>> s.get('b',0)
1
>>> s.get('a',0)
0

三、反向查找

反向查找,通过值找到键

def reverse_lookup(d, v):
    for k in d:
        if d[k] == v:
            return k
    raise LookupError()        

上面的函数是以字典名和值做参数

注:raise语句会生成一个异常 LookupError 是一个内置异常,来表示查找操作失败。

四、字典和列表

反转字典 即 键-值 新键(值)-新值(键)

def invert_dict(d):
    inverse = dict()
    for key in d:
        val = d[key]
        if val not in inverse:
            inverse[val] = [key]
        else:
            inverse[val].append(key)
    return inverse            

这是把键存到了列表里
例如:
histogram为上述的直方图函数

>>> h = histogram('parrot')
>>> h
{'a': 1, 'p': 1, 'r': 2, 't': 1, 'o': 1}
>>> inverse = invert_dict(h)
>>> inverse
{1: ['a', 'p', 't', 'o'], 2: ['r']} 

注:列表可以用作字典的值,但不能用作字典的键
因为字典的键必须是可散列的(hashable)
字典本身也是可用作值,不用于键

五、备忘

将之前计算的值保存以便后面使用的方法

常见的例子就是斐波那契数列fibonacci

known = {0:0, 1:1}
def fibonacci(n):
    if n in konwn:
        return known[n]
    res = fibonacci(n-1) + fibonacci(n-2)
    known[n] = res
    return res    

这是字典的作用之一

六、全局变量

__main__

之中的变量称为全局变量 全局变量常常用作标志:它是一种布尔变量,可以标志一个条件是否为真

ver = True
def example():
    if ver:
       print('Yes')

第二个重要的是,
当你在尝试给全局变量重新赋值,但是你发现值没有改变
例如

been = False
def example2():
    been = True     #错

其原因就是函数example2会新建一个局部变量been。局部变量在函数结束时就会消失,并且对全局变量没有任何影响

但是,
如果你想要在函数中对全局变量重新赋值,你要先声明这个变量
即用global语句

def example2():
    global been
    been = True

告诉函数example2不要新建局部变量,我想指的是全局变量

所以,想要修改全局变量就要先在函数中声明它

七、关于字典的几个函数

下面的函数均是字典名.函数
1.keys():查找字典中所有的键,返回可迭代的对象
即返回的是dict.key([ ])里面是列表

d = {'a': 1, 'b': 2, 'c': 3}
print(list(d.keys()))

直接转换成列表输出即可
2.values():查找字典中所有的值,…(合上述相同)

3 .items():查找字典中所有的键值对,返回一个含有元组的列表,元组里面有两项,一个键,一个值

>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> print(d.items())
dict_items([('a', 1), ('b', 2), ('c', 3)])

4.**dict.clear()**清空函数,清空字典。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值