一行代码的高阶函数

'''

给定一数组a=[{"id": 1, "status": 2}, {"id": 2, "status": 1}, {"id": 3, "status": 1}],
请将数组a转换为以status为key,
status对应的对象组合在一起做为value的字典b,
即b={1: [{"id": 2, "status": 1}, {"id": 3, "status": 1}], 2: [{"id": 1, "status": 2}]}
'''

a=[{"id": 1, "status": 2}, {"id": 2, "status": 1}, {"id": 3, "status": 1}]
## 先获取相同的status字段的字典
def func(x1):
    a = []
    b = {}
    for x in x1:
        a.append(x['status'])
        if x['status'] in a:
            b[x['status']] = x
    return b
def func1(x):
    a = []
    b = {}
    a.append(x['status'])
    a.sort()
    print(a)
    if x['status'] in a:
        b[x['status']] = [x]
    b = sorted(b) # 字典的话默认按照键来
    print(b)
    return b
print(func(a))
print(list(map(func1,a)))
b = []
c= {}
# for dist_a in a:
#     b.append(dist_a.get('status'))
#     for i in b:
#         if i == dist_a.get('status'):
            
'''
请使用列表推倒式将列表a=[30, 12, 66, 19, 39, 43, 36, 57, 121]
中的数能整除列表b=[3, 5, 1]中的数组合在一起配对,
即30可以整出3,所以30和3为一对。即最终结果为[(30,3), (30, 5)....,(121, 1)]
'''
# a=[30, 12, 66, 19, 39, 43, 36, 57, 121]        
# b=[3, 5, 1]
# c = [(i,j)for i in a for j in b if i % j==0]
# print(c)

'''
给定数组
a=[{"id": 2, "name": "test"}, {"id": 5, "name": "mm"}, {"id": 3, "name": "tt"}],
请将数组a的id按照指定数组b=[3, 2, 5]的顺序重新排序。
'''
## 字典排序
# b = {{"id": 2, "name": "test"}, {"id": 5, "name": "mm"}, {"id": 3, "name": "tt"}}
# print(sorted(b.items(), key=lambda x: x[1]))


# 这样多个字典赋值给一个对象就变成了元组
# a={"id": 2, "name": "test"}, {"id": 5, "name": "mm"}, {"id": 3, "name": "tt"} 
a=[{"id": 2, "name": "test"}, {"id": 5, "name": "mm"}, {"id": 3, "name": "tt"}]
b=[3, 2, 5] # 列表迭代返回元素
# def demo(b):
    # for i in b:
    #     return i # 这样只能使用一次
    # return b.iter()

## 迭代器使用场景
### 对于sorted对迭代的元素本身就会提取,然后按照顺序迭代每个元素,这时候排序可以按照指定元素的键或者值
list_a = sorted(a,key=lambda b: b ) # sorted是如何返回值呢
print(list_a)


### 根据指定的值排序;从列表中获取值指定,指定的值对对字典的id来卸货

## 真实场景,真实需求,风险点
# lambda默认直接返回函数
# list_a = sorted(a,lambda x: a[x].get('id') )
posted @ 2022-05-25 11:18  索匣  阅读(18)  评论(0编辑  收藏  举报