Skip to main content

字典

字典的合并

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之前如果需要一个固定顺序的字典,就需要使用OrderedDictAPI来配合创建,改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}]