目录
1 Python字典
总结:
构建Python字典的时候启名字的时候,不要乱起,为了以后排序可以用,Python字典传入有序字典后顺序什么样还不一定。
包含了以下内置方法:
序号 | 函数及描述 |
---|---|
1 | dict.clear() 删除字典内所有元素 |
2 | dict.copy() 返回一个字典的浅复制 |
3 | dict.fromkeys(seq[, val]) 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值 |
4 | dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值 |
5 | dict.has_key(key) 如果键在字典dict里返回true,否则返回false |
6 | dict.items() 以列表返回可遍历的(键, 值) 元组数组 |
7 | dict.keys() 以列表返回一个字典所有的键 |
8 | dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
9 | dict.update(dict2) 把字典dict2的键/值对更新到dict里 |
10 | dict.values() 以列表返回字典中的所有值 |
11 | pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 |
12 | popitem() 随机返回并删除字典中的一对键和值。 |
将字典转换成列表里面套元组的形式-变成有序字典了
#方法1,推荐代码少
d = {'a':1,'b':2,'c':3}
d.items() #dict_items([('a', 1), ('b', 2), ('c', 3)])
#方法2
z = list(zip(d.values(),d.keys()))
对字典排序。
注意:字典本身是没有顺序的就像集合一样,非要排序只能是转化为列表形式
1,
sorted(d.items(),key = lambda k : k[0]) #推荐
#[('a', 1), ('b', 2), ('c', 3)] 按照第几个位置元素排序k[0]就是按照abc排序,k[1]就是按照1,2,3排序
2,
import operator
sorted(d.items(), key=operator.itemgetter(0)) #这个函数一样的
字典添加数据:
自带方法 [字典类型].update([字典结构]),更新字典内容,有相同的键会直接替换成 update 的值: 没有则添加
单独拿出来字典的键值(values)或者索引(keys)拿出来装在列表里
d.values() #dict_values([1, 2, 3])
d.keys() #dict_keys(['a', 'b', 'c'])
2 有序字典OrderedDict
打印显示的时候方便调试才用上,其他时候用不上。
collections是Python的标准库,不需要导入,但是用的时候需要进行引入,这个就比较麻烦了,可以在pycharm中创建文件中自动加入。总的来说,如果不看顺序,基本上两个没区别,但是要作有顺序的输出的话,特别需要输出到文件的时,调试错误时候,就用OrderedDict更方便。
构造复杂的有序字典写代码比较费劲,不好写啊,所以当字典结构比较复杂的情况下,一般不要用有序字典了,超过两层的结构就算是特别复杂了,2层,在想想值不值。
from collections import OrderedDict
创建方法:
使用列表套用元组的形式:
使用zip函数将两个列表打包
list(zip(d.values(),d.keys())) #zip函数就是将输入的序列重新组合成每个元素都是元组的列表,其中每个元素由输入序列相同位置的元素组成
将 [1, 2, 3] 和 ['a', 'b', 'c'] 打包成[(1, 'a'), (2, 'b'), (3, 'c')]
字典的打印顺序变了
aa = {"b":1,"a":2,"c":3}
aa
{'a': 2, 'b': 1, 'c': 3}
dict2 = OrderedDict(aa)
由于 OrderedDict 能维护 key-value 对的添加顺序,因此即使两个 OrderedDict 中的 key-value 对完全相同,但只要它们的顺序不同,程序在判断它们是否相等时也依然会返回 false。
此外,由于 OrderedDict 是有序的,因此 Python 为之提供了如下两个方法:
- popitem(last=True):默认弹出并返回最右边(最后加入)的 key-value 对;如果将 last 参数设为 False,则弹出并返回最左边(最先加入)的 key-value 对。
- move_to_end(key, last=True):默认将指定的 key-value 对移动到最右边(最后加入);如果将 last 改为 False,则将指定的 key-value 对移动到最左边(最先加入)。
一样的地方
a = {}
dict1 = OrderedDict()
# 加入元素
a["x"]=1
dict1["x"]=1
# update一样
a.update({"a":2})
dict1.update({"a":2})
#得到元素一样
a.get("x") # dict1["abc"]
dict1.get("x") # dict1["abc"]
# 显示方式不一样,但是用法本质没区别
print("Python字典的字典 :",a)
print("有序字典 :",dict1)
# json 序列化一样
import json
print("json 序列化原装字典一样",json.dumps(a))
print("json 序列化有序字典一样,只不过有顺序",json.dumps(dict1))
不一样的地方
初始化不一样,
# 创建方式不一样,传入字典,或者列表套用元祖形式
dict2 = OrderedDict(a)
dict3 = OrderedDict([('x', 1), ('a', 2)])
print(dict2)
print(dict3)