2016-10-11 2 views
-2

Оригинального список питона словарю:Объединить Python список Словаря

[ 
    {"keyword": "nike", "country":"usa"}, 
    {"keyword": "nike", "country":"can"}, 
    {"keyword": "newBalance", "country":"usa"}, 
    {"keyword": "newBalance", "country":"can"} 
    ] 

Я хотел бы объединить список питон Dict и получить выход, как:

[ 
    {"keyword": "nike", "country":["usa","can"]}, 
    {"keyword": "newBalance", "country":["usa","can"]} 
    ] 

Что является наиболее эффективным способом сделать это ?

+0

Необходимо четко указать, как словари консолидируются. Ваш список отсортирован? Вы комбинируете значения 'country' на основе значения ключевого слова? Есть ли в этих словарях другие возможные ключи? Если не отсортировано, вы хотите объединить только соседние словари или все словари с тем же значением «ключевое слово»? –

ответ

0

Вот некоторые общие указатели. Я не собираюсь кодировать все это для вас. Если вы опубликуете больше о том, что вы пробовали, и о конкретном коде, в котором вам нужна помощь, я был бы рад помочь больше.

Похоже, что вы комбинируете только те, которые имеют одинаковое значение для ключевого слова. Итак, переберите значения этого ключа и объедините их на основе этого.

Чтобы объединить кучу словарей, как только вы разделите их, как указано выше, сначала вам нужно создать новый, где «страна» отображается в пустой список. Затем, когда вы рассматриваете каждый из словарей, проверьте, находится ли его значение для «страны» в этом списке. Если это не так, append это.

-2
L = [ 
    {"keyword": "nike", "country":"usa"}, 
    {"keyword": "nike", "country":"can"}, 
    {"keyword": "newBalance", "country":"usa"}, 
    {"keyword": "newBalance", "country":"can"} 
    ] 


def consolidate(L): 
    answer = {} 
    for d in L: 
     if d['keyword'] not in answer: 
      answer['keyword'] = set() 
     answer['keyword'].add(d['country']) 

    retval = [] 
    for k,countries in answer.items(): 
     retval.append({'keyword':d['keyword'], 'country':list(countries)}) 
    return retval 
+0

44.6k rep и вы сбрасываете код, даже не комментируя, что происходит? –

Смежные вопросы