выравнивание списка словарей

#python-3.x #list #dictionary

#python-3.x #Список #словарь

Вопрос:

У меня есть список словарей, в которых есть ключ, значения и другая информация, например:

 mylist  = [ {'key': 'captial' , 'value': 'captial of india'},
            {'key': 'captial' , 'value': 'captial of usa'},
            {'key': 'fruit' , 'value': 'colour of apple'},
            {'key': 'fruit' , 'value': 'colour of orange'}]
  

Как мне выровнять список, чтобы получить следующий результат

 result=[{'title':'captial',questions:[{text:'captial of usa'},{text:'captial of india'}]},
        {'title':'fruit',questions:[{text:'colour of apple'},{text:'colour of orange'}]}]
  

Ответ №1:

Вы можете использовать defaultdict и понимание списка для достижения ваших результатов. defaultdict сгруппирует значения одних и тех же ключей, присутствующих в mylist , а затем вы будете использовать эти сгруппированные значения с вашими пользовательскими ключами (как требуется в вашем result ), используя понимание списка.

 from collections import defaultdict

mylist = [...]

a_list = defaultdict(list)

for item in mylist:
    a_list[item["key"]].append(item["value"])

result = [
    {"title": key, "questions": [{"text": v} for v in value]}
    for key, value in a_list.items()
]
  

Вывод:

 [
    {
        "title": "captial",
        "questions": [{"text": "captial of india"}, {"text": "captial of usa"}],
    },
    {
        "title": "fruit",
        "questions": [{"text": "colour of apple"}, {"text": "colour of orange"}],
    },
]