对字典列表中的键的每组值应用函数

问题描述 投票:0回答:1

假设我有这个:

my_list = [{'id':'1','value':'1'},
{'id':'1','value':'8'},
{'id':'2','value':'2'},
{'id':'2','value':'3'},
{'id':'2','value':'5'},
]

并且我想为键shuffle的每组值分别应用一个函数(例如id

所以我想举个例子:

my_list = [{'id':'1','value':'1'},
{'id':'1','value':'8'},
{'id':'2','value':'3'},
{'id':'2','value':'5'},
{'id':'2','value':'2'},
]

因此,我不希望在不同的值组之间进行某些更改(例如id = 1,2等),而仅在每个值中进行更改。

python python-3.x
1个回答
0
投票

如果您的列表按groupby排序或按'id'排序并使用'id',则直接使用groupby

from itertools import groupby
import random

my_list = [{'id':'1','value':'1'},
           {'id':'1','value':'8'},
           {'id':'2','value':'2'},
           {'id':'2','value':'3'},
           {'id':'2','value':'5'}]

res = []
for k, g in groupby(my_list, lambda x: x['id']):
    lst = list(g)
    random.shuffle(lst)
    res.append(lst)

print(res)
# [{'id':'1','value':'1'},
#  {'id':'1','value':'8'},
#  {'id':'2','value':'3'},
#  {'id':'2','value':'5'},
#  {'id':'2','value':'2'}]
© www.soinside.com 2019 - 2024. All rights reserved.