字典
字典的合并
python3.4以上
y = {'a':1, 'b':2}
x = {'c':3, 'd':4}
z = {**x, **y}
字典的浅拷贝
字典的深拷贝
字典排序
def sortedDictValues1(adict):
items = adict.items()
items.sort()
return [value for key, value in items]
指定key排序
[{"NpcId":99}, {"NpcId":66}]
res = sorted(res, key=lambda x: (x["NpcId"]))
[{"NpcId":66}, {"NpcId":99}]
带顺序的字典
python3.6及之后Dict就都有序了,但3.6之前如果需要一个固定顺序的字典,就需要使用OrderedDict
API来配合创建,改api确保字典的顺序跟我们初始化编写代码时候一致。
from collections import OrderedDict
relative_xy_template = {
"left_top": [0, 0],
"right_top": [1, 1],
"right_down": [2, 2],
"left_down": [3, 3],
}
list_xy = OrderedDict(relative_xy_template)
print("list_xy: ", list_xy)
print(tuple(relative_xy_template.values()))
字典去重
方法1:先将字段转换成字符串,然后通过set去重
适用于字典中嵌套了字典的情况,但是效率不高
data2 = [{"a": {"b": "c"}}, {"a": {"b": "c"}}]
def delete_duplicate_str(data):
immutable_dict = set([str(item) for item in data])
data = [eval(i) for i in immutable_dict]
return data
print(delete_duplicate_str(data2))
# [{'a': {'b': 'c'}}]
方法2:将字段转成tuple,然后通过set去重
不适用于字典嵌套的情况
# 当刚转换成tuple时,根据dict的key先对字典进行一次根据key的排序
def tuple_sort(tuple_dict)->Tuple:
return tuple(sorted(tuple_dict, key=lambda x: (x[0], x[1])))
data = [dict(t) for t in set([ tuple_sort(tuple(d.items())) for d in data])]
# data:
# [{'a': 1}, {'b': 2}]