Python-同时插入和更新python字典

时间:2019-04-13 10:38:32

标签: python

所以我有一个像这样的字典列表:

[{
  '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都是键,并且如果它属于同一个字段,则将其附加到valuedate中。

注意::我想不使用for循环来执行此操作(除了循环访问列表以外的循环)。我想使用update()append()等python dict函数。

任何优化的解决方案都将非常有帮助。

3 个答案:

答案 0 :(得分:1)

您可以只使用{{1}的iteratelist,然后使用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"])