闲话Python编程-字典dict

        在我的Python编程经历中,Python有两大最常用的数据结构:列表list和字典dict,搞明白了这两个数据结构的所有知识点,日常编程基本不成问题了。列表list在前面专题已经详细讲过,本章来着重讲解字典dict的用法。

1. 定义与创建

        字典dict是一个映射的类型, 它也是一个容器,容器里面是一个个key和value的映射对象,比如:{100: 'aaaa',  200: 'bbb'} 或者 {'Tom':  20, 'Jack': 21}。

        字典dict的key需要是一个可Hashable的对象,这需要去了解Hash是什么:

        Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。比如把字符文本映射为一个整型值,或者把任意长度的文本映射成一个固定长度的字符串,在文件下载时我们常常会发现同时提供了一个文件Hash值,就是让我们下载完文件后对文件内容做Hash,以便和下载网站提供的Hash值进行对比来判断下载文件是否完整。

        是不是Python里面所有对象都是可Hashable的呢,不是!一个对象是可Hashable的,那是需要它实现了__hash__()内置函数,在它的生命周期内它的Hash值是不会变的。这么讲还是比较抽象,那直接从实际例子中讲:

  1.  大部分Python不可修改的内嵌对象都是可Hashable的:比如整型值,字符串。
  2.  不可修改的容器tuple和frozenset是可Hashable,当然同时还需要它们的元素是可Hashable的。
  3.  用户定义的类实例,默认也是可Hashable的。
  4. 反之,可修改的容器如list和dict就不是可Hashable的。

        字典dict对key要求是可Hashable的,对value值却不需要,任何对象都可以。

        我们来看看字典dict的几种创建方式:

  1. 用冒号分隔的key:value列表:{100: 'aaaa',  200: 'bbb'}、{'Tom':  20, 'Jack': 21}
  2. 空字典:{}
  3. 用for循环构造:{x: x ** 2 for x in range(10)}
  4. 用内置函数dict()进行构造:

         dict()

   dict([('foo', 100), ('bar', 200)])

   dict(foo=100, bar=200)

   dict({'one': 1, 'three': 3}, two=2)

         dict(zip(['one', 'two', 'three'], [1, 2, 3]))

        最后来一点测试验证代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 练习dict


# 创建dict
def create_dict():
    d1 = {}
    print('d1:', d1)
    d2 = dict()
    print('d2:', d2)
    d3 = {100: 'aaaa', 200: 'bbb'}
    print('d3:', d3)
    d4 = {x: x ** 2 for x in range(10)}
    print('d4:', d4)

    d5 = dict(one=1, two=2, three=3)
    print('d5:', d5)
    d6 = dict([('one', 1), ('two', 2), ('three', 3)])
    print('d6:', d6)
    d7 = dict({'one': 1, 'two': 2}, three=3)
    print('d7:', d7)
    d8 = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
    print('d8:', d8)


def main():
    create_dict()


if __name__ == '__main__':
    main()

2. 操作

        字典dict也是一个容器类型,里面存储管理键值对的元素,基础的操作必定是增、删、查、改。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 练习dict


# 创建dict
def create_dict():
    d1 = {}
    print('d1:', d1)
    d2 = dict()
    print('d2:', d2)
    d3 = {100: 'aaaa', 200: 'bbb'}
    print('d3:', d3)
    d4 = {x: x ** 2 for x in range(10)}
    print('d4:', d4)

    d5 = dict(one=1, two=2, three=3)
    print('d5:', d5)
    d6 = dict([('one', 1), ('two', 2), ('three', 3)])
    print('d6:', d6)
    d7 = dict({'one': 1, 'two': 2}, three=3)
    print('d7:', d7)
    d8 = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
    print('d8:', d8)


# 操作dict
def operate_dict():
    info = {'Jack': 15, 'Tom': 16}
    print(info)

    # 新增: key不存在
    info['Alic'] = 14
    print(info)

    # 修改: key已经存在
    info['Jack'] = 17
    print(info)

    # 删除
    del info['Jack']
    print(info)

    # 判断元素是否存在
    if 'Alic' in info:
        print('Alic is in ', info)
    if 'Black' not in info:
        print('Black is not in ', info)

    # 获取指定key的值,如果key不存在,则执行抛出异常KeyError
    x = info['Alic']
    print("info['Alic']=", x)

    # 同样是获取值,但是当key不存在时,会返回None, 而不会异常
    x = info.get('Jack')
    print("info['Jack']=", x)

    # 遍历
    for k, v in info.items():
        print('key=', k, ', value=', v)

    for k in info.keys():
        print('key=', k)

    for v in info.values():
        print('value=', v)

    # 清空
    info.clear()
    print(info)


def main():
    #create_dict()
    operate_dict()


if __name__ == '__main__':
    main()

        上面代码中operate_dict()函数把常见的操作练习了一遍,dict还有其它的方法,使用很简单,自行查官网资料。

3. 结束语

        Python语言库支持的数据结构最重要最常用的就是序列和字典两个了,用好了它们基本解决了大部分的数据结构需求,字典dict适合具有键值映射关系的数据结构需求的场景。

你可能感兴趣的:(Python,python,开发语言)