所以我有一个像这样的字典列表:
[{
'field': {
'data': 'F1'
},
'value': F1Value1,
'date': datetime.datetime(2019, 3, 1, 0, 0)
}, {
'field': {
'data': 'F2'
},
'value': F2Value1,
'date': datetime.datetime(2019, 2, 5, 0, 0)
}, {
'field': {
'data': 'F2'
},
'value': F2Value2,
'date': datetime.datetime(2019, 2, 7, 0, 0)
}]
我想要一个看起来像这样的输出:
[
{
'F1': [
{
'value': F1Value1,
'date': datetime.datetime(2019, 3, 1, 0, 0)
}
]
},
{
'F2': [
{
'value': F2Value1,
'date': datetime.datetime(2019, 2, 5, 0, 0)
},
{
'value': F2Value2,
'date': datetime.datetime(2019, 2, 5, 0, 0)
},
]
}
]
也就是说,我希望每个field.data
都是键,并且如果它属于同一个字段,则将其附加到value
和date
中。
注意::我想不使用for循环来执行此操作(除了循环访问列表以外的循环)。我想使用update()
和append()
等python dict函数。
任何优化的解决方案都将非常有帮助。
答案 0 :(得分:1)
您可以只使用{{1}的iterate
到list
,然后使用dict
中的defaultdict
来添加具有唯一密钥的项目,>
collections
答案 1 :(得分:1)
使用itertools.groupby
:
from itertools import groupby
from pprint import pprint
result = [{key: [{k: v for k, v in element.items() if k != 'field'}
for element in group]}
for key, group in groupby(data, lambda element: element['field']['data'])]
pprint(result)
输出:
[{'F1': [{'date': datetime.datetime(2019, 3, 1, 0, 0), 'value': 'F1Value1'}]},
{'F2': [{'date': datetime.datetime(2019, 2, 5, 0, 0), 'value': 'F2Value1'},
{'date': datetime.datetime(2019, 2, 7, 0, 0), 'value': 'F2Value2'}]}]
答案 2 :(得分:0)
仅使用字典,列表和设置:
isset($_POST["Import"])