@songying
2018-07-16T10:19:45.000000Z
字数 2674
阅读 1362
python数据类型
http://www.runoob.com/python3/python3-dictionary.html
键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
d = {key1: value1, key2: value2}
d[key1] # 访问元素
d[key1] = value_n # 修改字典
del d # 删除字典
如果你想要一个键映射多个值,那么你就需要将这多个值放到另外的容器中,比如列表或者集合里面。选择使用列表还是集合取决于你的实际需求。如果你想保持元素的插入顺序就应该使用列表,如果想去掉重复元素就使用集合(并且不关心元素的顺序问题)。
d = {
'a' : [1, 2, 3]
'b' : [4, 5]
}
为 了 能 控 制 一 个 字 典 中 元 素 的 顺 序, 你 可 以 使 用 collections 模 块 中 的 OrderedDict 类。
OrderedDict 内部维护着一个根据键插入顺序排序的双向链表。每次当一个新的元素插入进来的时候,它会被放到链表的尾部。对于一个已经存在的键的重复赋值不会
改变键的顺序。
需要注意的是,一个 OrderedDict 的大小是一个普通字典的两倍,因为它内部维护着另外一个链表。所以如果你要构建一个需要大量 OrderedDict 实例的数据结构的时候(比如读取 100,000 行 CSV 数据到一个 OrderedDict 列表中去),那么你就得仔细权衡一下是否使用 OrderedDict带来的好处要大过额外内存消耗的影响。
一些常见的操作,如求最小值, 最大值, 排序等。通常先使用zip()将键,值反转过来。
"""返回键值对"""
min_price = min(zip(prices.values(), prices.keys())) # 求最小值
max_price = max(zip(prices.values(), prices.keys())) # 求最大值
prices_sorted = sorted(zip(prices.values(), prices.keys())) # 排序字典数据
需要注意的是在计算操作中使用到了 (值,键) 对。当多个实体拥有相同的值的时候,键会决定返回结果。
一些不常见的情况:
min(prices) # Returns 'AAPL' # 比较键, 返回键
min(prices.values()) # Returns 10.75 # 比较值, 返回值
min(prices, key=lambda k: prices[k]) # Returns 'FB' # 比较值, 返回键
# Find keys in common
a.keys() & b.keys() # { 'x', 'y' }
# Find keys in a that are not in b
a.keys() - b.keys() # { 'z' }
# Find (key,value) pairs in common
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 所对应的值,返回值为被删除的值。 |
dict2 = dict1 # dict2 与 dict1指向的是同一个对象, dict2更改后, dict1也会发生改变
dict3 = dict1.copy() # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值。
dict.fromkeys(seq[, value])
- seq: 字典键值列表
- value: 可选参数, 设置键序列(seq)的值
以列表返回可遍历的(键, 值) 元组数组。、
dict.items()
以列表返回一个字典所有的键
dict.keys()
和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值。、
dict.setdefault(key, default=None)
以列表返回字典中的所有值
dict.values()
把字典参数 dict2 的 key/value(键/值) 对更新到字典 dict 里。
dict.update(dict2)
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
pop(key[,default])