将列表中的第一个项目相同的项目分组

时间:2018-06-22 06:18:50

标签: python

如何根据第一个项目对列表中的项目进行分组?例如:

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}]

2 个答案:

答案 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}]
相关问题