Python 在DICT列表中,按键的每组值应用函数
假设我有这个:Python 在DICT列表中,按键的每组值应用函数,python,python-3.x,Python,Python 3.x,假设我有这个: my_list = [{'id':'1','value':'1'}, {'id':'1','value':'8'}, {'id':'2','value':'2'}, {'id':'2','value':'3'}, {'id':'2','value':'5'}, ] 我想分别为键id的每组值应用一个函数(例如shuffle) 我想举个例子: my_list = [{'id':'1','value':'1'}, {'id':'1','value':'8'}, {'id':'2','
my_list = [{'id':'1','value':'1'},
{'id':'1','value':'8'},
{'id':'2','value':'2'},
{'id':'2','value':'3'},
{'id':'2','value':'5'},
]
我想分别为键id
的每组值应用一个函数(例如shuffle
)
我想举个例子:
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等)之间更改某些内容,而只希望在每个值组中分别更改这些内容。如果您的列表按'id'
排序,请直接使用groupby
,或者按'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 += lst
print(res)
# [{'id':'1','value':'1'},
# {'id':'1','value':'8'},
# {'id':'2','value':'3'},
# {'id':'2','value':'5'},
# {'id':'2','value':'2'}]
如果列表按
'id'
排序,请直接使用groupby
,或按'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 += lst
print(res)
# [{'id':'1','value':'1'},
# {'id':'1','value':'8'},
# {'id':'2','value':'3'},
# {'id':'2','value':'5'},
# {'id':'2','value':'2'}]
您是否应该使用
res+=lst
而不是append来将结果保持为一个平面列表?当我运行它时,会得到两个嵌套的结果lists@schwartz721哎呀。我的错;刚刚纠正。谢谢请记住,groupby
仅在列表之前已排序的情况下才有效。如果不是,那么它就不起作用了。你不应该使用append而不是append来将结果保持为一个平面列表吗?当我运行它时,我会得到两个嵌套的lists@schwartz721哎呀。我的错;刚刚纠正。谢谢请记住,groupby
仅在列表之前已排序的情况下才有效。如果不是的话,那就没用了。