【问题标题】:How to merge a list of dicts in python which have same values in a particular key? [duplicate]如何在 python 中合并在特定键中具有相同值的字典列表? [复制]
【发布时间】:2020-05-06 08:57:10
【问题描述】:

转这个json

[{"field": "DDC", "values": "[\"000\"]"}, {"field": "DDC", "values": "[\"200\"]"}, {"field": "DDC", "values": "[\"900\"]"}, {"field": "learningResourceType", "values": "[\"journal\"]"}, {"field": "inLanguage", "values": "[\"eng\"]"}, {"field": "type", "values": "[\"text\"]"}]

进入下面的json

[{"field": "DDC", "values": "[\"000\" , \"200\", \"900\"]"}, {"field": "learningResourceType", "values": "[\"journal\"]"}, {"field": "inLanguage", "values": "[\"eng\"]"}, {"field": "type", "values": "[\"text\"]"}]

【问题讨论】:

    标签: python


    【解决方案1】:

    检查一下:

    import ast
    new = []
    
    unique_fields = set()
    for x in a:
      unique_fields.add(x['field'])
    
    for x in unique_fields:
      temp = {}
      temp['field']=x
      lt = []
      for y in a:
        if(y['field']==x):
          lt.append(ast.literal_eval(y['values'])[0])
      temp['values'] = lt
      new.append(temp)
    
    print(new)
    

    输出:

    [{'field': 'DDC', 'values': ['000', '200', '900']}, {'field': 'inLanguage', 'values': ['eng']}, {'field': 'type', 'values': ['text']}, {'field': 'learningResourceType', 'values': ['journal']}]
    

    【讨论】:

      【解决方案2】:

      你可以试试这个。

      import ast
      a=[{"field": "DDC", "values": "[\"000\"]"}, {"field": "DDC", "values": "[\"200\"]"}, {"field": "DDC", "values": "[\"900\"]"}, {"field": "learningResourceType", "values": "[\"journal\"]"}, {"field": "inLanguage", "values": "[\"eng\"]"}, {"field": "type", "values": "[\"text\"]"}]
      d=set()
      for i in a:
          d.add(i['field'])
      
      #d={'DDC', 'type', 'learningResourceType', 'inLanguage'}
      
      fin=[]
      out={}
      
      for key in d:
          for dic in a:
              if key==dic['field']:
                  out['field']=key
                  out.setdefault('values',[])
                  out['values']+=ast.literal_eval(dic.setdefault('values',[]))
          fin.append(out)
          out={}
      
      for i in fin: #fin=[{'field': 'DDC', 'values': ['000', '200', '900']}, {'field': 'type', 'values': ['text']}, {'field': 'learningResourceType', 'values': ['journal']}, {'field': 'inLanguage', 'values': ['eng']}]
          print(i)
      

      输出

      {'field': 'DDC', 'values': ['000', '200', '900']}
      {'field': 'type', 'values': ['text']}
      {'field': 'learningResourceType', 'values': ['journal']}
      {'field': 'inLanguage', 'values': ['eng']}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-20
        • 2018-08-02
        • 2015-08-25
        • 1970-01-01
        • 1970-01-01
        • 2021-06-27
        • 1970-01-01
        • 2019-11-19
        相关资源
        最近更新 更多