如何根据第一个项目对列表中的项目进行分组?例如:
df = pd.read_csv('a.csv')
df.rename(columns={'Unnamed: 3': 'value'}, inplace=True)
from_time = None
device = None
type=None
output = {}
for idx, row in df.iterrows():
if not pd.isnull(row['from_time']):
from_time = row['from_time']
if not pd.isnull(row['device']):
device = row['device']
if from_time not in output:
output[from_time] = {}
if device not in output[from_time]:
output[from_time][device] = {}
output[from_time][device][row['type']] = row['value']
将转换为:
list= [{'main': 0328, 'a':1},{'main': 0328, 'b': 2},{'main': 0486, 'a': 5},{'main': 0486, 'b': 6}]
或者这样更好:
list [{'main: 0328','a':1, 'b':2}, {'main': 0486, 'a':5, 'b': 6}]
答案 0 :(得分:0)
使用$formId = $request->request->all()['match']['matchId'];
$form[$formId]->handleRequest($request);
if ($form[$formId]->isSubmitted() && $form[$formId]->isValid()) {
$em->flush($matchEntityList[$formId]);
}
演示:
itertools.groupby
输出:
from itertools import groupby
l= [{'main': 328, 'a':1},{'main': 328, 'b': 2},{'main': 486, 'a': 5},{'main': 486, 'b': 6}]
res = []
for key, group in groupby(l, lambda x: x["main"]):
d = {}
for i in group:
del i['main']
d.update(i)
res.append(d)
print(res)
答案 1 :(得分:0)
这是我的建议,简短,易读且优雅的恕我直言:
from collections import defaultdict
myList= [{'main': 328, 'a':1},{'main': 328, 'b': 2},{'main': 486, 'a': 5},{'main': 486, 'b': 6}]
myDict = defaultdict(dict)
for d in myList:
myDict[d.pop('main')].update(d)
print(myDict) # {328: {'a': 1, 'b': 2}, 486: {'a': 5, 'b': 6}}
print(myDict.values()) # [{'a': 1, 'b': 2}, {'a': 5, 'b': 6}]