[关闭]
@songying 2018-07-16T10:19:45.000000Z 字数 2674 阅读 1362

python 字典

python数据类型


http://www.runoob.com/python3/python3-dictionary.html

格式

键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

  1. d = {key1: value1, key2: value2}
  2. d[key1] # 访问元素
  3. d[key1] = value_n # 修改字典
  4. del d # 删除字典

特性

  1. 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
  2. 键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行

字典的键映射多个值

如果你想要一个键映射多个值,那么你就需要将这多个值放到另外的容器中,比如列表或者集合里面。选择使用列表还是集合取决于你的实际需求。如果你想保持元素的插入顺序就应该使用列表,如果想去掉重复元素就使用集合(并且不关心元素的顺序问题)。

  1. d = {
  2. 'a' : [1, 2, 3]
  3. 'b' : [4, 5]
  4. }

字典排序

为 了 能 控 制 一 个 字 典 中 元 素 的 顺 序, 你 可 以 使 用 collections 模 块 中 的 OrderedDict 类。

OrderedDict 内部维护着一个根据键插入顺序排序的双向链表。每次当一个新的元素插入进来的时候,它会被放到链表的尾部。对于一个已经存在的键的重复赋值不会
改变键的顺序。
需要注意的是,一个 OrderedDict 的大小是一个普通字典的两倍,因为它内部维护着另外一个链表。所以如果你要构建一个需要大量 OrderedDict 实例的数据结构的时候(比如读取 100,000 行 CSV 数据到一个 OrderedDict 列表中去),那么你就得仔细权衡一下是否使用 OrderedDict带来的好处要大过额外内存消耗的影响。

字典的运算

一些常见的操作,如求最小值, 最大值, 排序等。通常先使用zip()将键,值反转过来。

  1. """返回键值对"""
  2. min_price = min(zip(prices.values(), prices.keys())) # 求最小值
  3. max_price = max(zip(prices.values(), prices.keys())) # 求最大值
  4. prices_sorted = sorted(zip(prices.values(), prices.keys())) # 排序字典数据

需要注意的是在计算操作中使用到了 (值,键) 对。当多个实体拥有相同的值的时候,键会决定返回结果。

一些不常见的情况:

  1. min(prices) # Returns 'AAPL' # 比较键, 返回键
  2. min(prices.values()) # Returns 10.75 # 比较值, 返回值
  3. min(prices, key=lambda k: prices[k]) # Returns 'FB' # 比较值, 返回键

查找两个字典的相同点

  1. # Find keys in common
  2. a.keys() & b.keys() # { 'x', 'y' }
  3. # Find keys in a that are not in b
  4. a.keys() - b.keys() # { 'z' }
  5. # Find (key,value) pairs in common
  6. a.items() & b.items() # { ('y', 2) }

相关内置函数

函数 描述
len(dict) 就算字典元素个数,即键的总数
str(dict) 输出字典,以可打印的字符串表示。
type(dict) 返回输入的变量类型,如果变量是字典就返回字典类型。

相关函数

函数 功能
dict.clear() 删除自店内所有元素
dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回默认值
dict.copy() 返回一个字典的浅复制
dict.fromkeys(seq[, value]) 创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值
dict.items 以列表返回可遍历的(键,值)元组数组
dict.keys() 以列表返回一个字典所有的键
dict.setdefault(key, default=None) 类似get, 如果键不已经存在于字典中,将会添加键并将值设为默认值
dict.values() 以列表返回字典中的所有值
dict.update(dict2) 把字典参数 dict2 的 key/value(键/值) 对更新到字典 dict 里
dict.pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。

copy() 与 直接赋值的区别

  1. dict2 = dict1 # dict2 与 dict1指向的是同一个对象, dict2更改后, dict1也会发生改变
  2. dict3 = dict1.copy() # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用

方法详述

dict.fromkeys

用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值。

  1. dict.fromkeys(seq[, value])
  • seq: 字典键值列表
  • value: 可选参数, 设置键序列(seq)的值

dict.items

以列表返回可遍历的(键, 值) 元组数组。、

  1. dict.items()

dict.keys

以列表返回一个字典所有的键

  1. dict.keys()

dict.setdefault()

和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值。、

  1. dict.setdefault(key, default=None)

dict.values()

以列表返回字典中的所有值

  1. dict.values()

dict.update

把字典参数 dict2 的 key/value(键/值) 对更新到字典 dict 里。

  1. dict.update(dict2)

dict.pop

删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。

  1. pop(key[,default])
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注