dict创建/合并/自定义排序

1.创建方式

# 1.
a = dict(one=1,two=2,three=3)
# 2.
a = dict({"one":1,"two":2,"three":3})
# 3.zip
a = dict(zip(["one","two","three"],[1,2,3]))
# 4.列表元组
a = dict([("one",1),("two",2),("three",3)])
# 5.字典推导
a = {k:v for k,v in zip(["one","two","three"],[1,2,3]}

2.合并方式

d1 = {"usr":"root","pwd":"123456"}
d2 = {"ip":"127.0.0.1","port":"8080"}

# 1.dict.update
d3 = {}
d3.update(d1)
d3.update(d2)

# 2.python3.5后
d3 = {**d1,**d2}

# 3.dict(d1,**d2)
d3 = dict(d1,**d2)

# 4.字典的常规处理
for k,v in d1.items():
    d3[k] = v

for k,v in d2.items():
    d3[k]=v

3.排序

dict_date = {6:9,10:5,3:11,8:2,7:6}
# 1.按key升序
d = sorted(dict_data,key=lambda x:x[0])

# 2. 按value降序,reverse=True
d = sorted(dict_data,key=lambda x:x[1],reverse=True)

# 3.operator.itemgetter
rank = [
    {'score': 12, 'time': '2022-08-04'},
    {'score': 23, 'time': '2022-08-01'},
    {'score': 23, 'time': '2022-07-24'},
    {'score': 10, 'time': '2022-07-16'},
    {'score': 12, 'time': '2022-07-16'},

]
from operator import itemgetter
# 按照score排序,
d = sorted(dict_data,key=itemgetter("score")
# 先按照score排序,score相同,在按time排序
d = sorted(dict_data,key=itemgetter("score","time")
# itemgetter排序列表元组,先按下标为1的排序,相同在按2排序
score = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
d = sorted(score ,key=itemgetter(1,2)
     
# 4.cmp_to_key 自定义排序
from functools import cmp_to_key

def custom_sorted(x,y):
    if x["score"]>y["score"]:
        return 1     # 返回1交换位置
    elif x["score"]<y["score"]:
        return -1    # 返回-1不交换位置
    else:
        if x["time"]>y["time"]:
            return 1
        else:
            return -1

to_rank = sorted(rank,key=cmp_to_key(custom_sorted))

4.最大值

prices = {
    'ACME': 45.23,
    'AAPL': 612.78,
    'IBM': 205.55,
    'HPQ': 37.20,
    'FB': 10.75,
}
# 1.根据value获取最大值:输出最大值的key
max_ = max(prices,key=lambda k:prices[k])
print(max_)
>>AAPL
# 2.获取最大值key,value
print(max(zip(prices.values(),prices.keys())))
>>(612.78,'AAPL')

dict创建/合并/自定义排序
https://centyuan.github.io/2023/11/06/Python从入门到放弃/Python dict的五种创建方式和四种合并自定义排序方式/
作者
hlyuan
发布于
2023年11月6日
许可协议