python 字典和from collections import OrderedDict

目录

总结:

一样的地方

不一样的地方

顺序问题


1 Python字典

总结:

构建Python字典的时候启名字的时候,不要乱起,为了以后排序可以用,Python字典传入有序字典后顺序什么样还不一定。

包含了以下内置方法:

序号函数及描述
1dict.clear()
删除字典内所有元素
2dict.copy()
返回一个字典的浅复制
3dict.fromkeys(seq[, val])
创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
4dict.get(key, default=None)
返回指定键的值,如果值不在字典中返回default值
5dict.has_key(key)
如果键在字典dict里返回true,否则返回false
6dict.items()
以列表返回可遍历的(键, 值) 元组数组
7dict.keys()
以列表返回一个字典所有的键
8dict.setdefault(key, default=None)
和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
9dict.update(dict2)
把字典dict2的键/值对更新到dict里
10dict.values()
以列表返回字典中的所有值
11pop(key[,default])
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
12popitem()
随机返回并删除字典中的一对键和值。

将字典转换成列表里面套元组的形式-变成有序字典了

#方法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 为之提供了如下两个方法:

  1. popitem(last=True):默认弹出并返回最右边(最后加入)的 key-value 对;如果将 last 参数设为 False,则弹出并返回最左边(最先加入)的 key-value 对。
  2. 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)

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值