如何在python中合并在特定键中具有相同值的dict列表?

2024-06-16 12:25:57 发布

您现在位置:Python中文网/ 问答频道 /正文

打开这个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\"]"}]

Tags: textjsonfieldtypeengjournalvaluesddc
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']}

选中此项:

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

相关问题 更多 >