如何在循环内部根据键合并字典

所以我有一个嵌套字典列表,我想创建一个字典。几天前我遇到了类似的问题,我认为解决方案非常相似,但我似乎无法掌握它。


这是原始列表:


list = [{'user': 'nikos', 'area': 'Africa', 'keywords': 'Kenya$Egypt'},

{'user': 'nikos', 'area': 'Europe', 'keywords': 'Brexit'},

{'user': 'maria', 'area': 'US & Canada', 'keywords': 'New York'},

{'user': 'maria', 'area': 'Latin America ', 'keywords': 'Brazil'}]

我想这样创建字典:


dictionary = {'user': 'nikos', 'areas': {'Africa': ['Kenya', 

'Egypt'],'Europe': ['Brexit']}

1)我设法创建了这些:


{'user': 'nikos', 'areas': {'Africa': ['Kenya', 'Egypt']}}

{'user': 'nikos', 'areas': {'Europe': ['Brexit']}}

但我不能越过这一点并在我的循环中合并到一个字典中(根据我的尝试,我得到了各种错误)


2)我也尝试过这样的字典理解:


dict_1 = {'user': username, 'areas': {new_profile.get('areas') for x in 

new_profs}}

这当然是不正确的,但我想知道我是否接近正确的


username = 'nikos'


user = {}


for i in list:

  if i['user'] == username: 

    new_profile = {'user': username, 'areas': {i['area']: i['keywords'].split('$')}}

    if new_profile:

        new_profs = []

        new_profs.append(new_profile)


杨魅力
浏览 154回答 2
2回答

天涯尽头无女友

你走在正确的道路上。基本上一旦你得到new_profs你需要单独处理合并。像这样的东西:userlist = [{'user': 'nikos', 'area': 'Africa', 'keywords': 'Kenya$Egypt'},{'user': 'nikos', 'area': 'Europe', 'keywords': 'Brexit'},{'user': 'maria', 'area': 'US & Canada', 'keywords': 'New York'},{'user': 'maria', 'area': 'Latin America ', 'keywords': 'Brazil'}]username = 'nikos'user = {}new_profs = []for i in userlist:  if i['user'] == username:    new_profile = {'user': username, 'areas': {i['area']: i['keywords'].split('$')}}    if new_profile:        new_profs.append(new_profile)print new_profs'''will give you [{'user': 'nikos', 'areas': {'Africa': ['Kenya', 'Egypt']}}, {'user': 'nikos', 'areas': {'Europe': ['Brexit']}}]'''#get all unique usersuserset = set([x['user'] for x in new_profs])merged_profs = []#for each unique user, go through all the new_profs and merge all of them into one dictfor user in userset:    merged_dict = {}    for userprof in new_profs:        if userprof['user'] == user:            if merged_dict:                new_areas = merged_dict.get('areas')                # you might need to tweak this for your needs. For example, if you want all Europe countries                # in one dict. Better pull this out into method and add logic accordingly                new_areas.update(userprof['areas'])                merged_dict['areas'] = new_areas            else:                merged_dict.update(userprof)    merged_profs.append(merged_dict)print merged_profs#gives you [{'user': 'nikos', 'areas': {'Europe': ['Brexit'], 'Africa': ['Kenya', 'Egypt']}}]

海绵宝宝撒

我会这样做:#!/usr/bin/python3l = [     {'user': 'nikos', 'area': 'Africa', 'keywords': 'Kenya$Egypt'},     {'user': 'nikos', 'area': 'Europe', 'keywords': 'Brexit'},     {'user': 'maria', 'area': 'US & Canada', 'keywords': 'New York'},     {'user': 'maria', 'area': 'Latin America ', 'keywords': 'Brazil'}    ]# The end resultresult = list()# First extract the names from the dict and put them in# a set() to remove duplicates.for name in set([x["user"] for x in l]):    # define the types that hold your results    user_dict = dict()    area_dict = dict()    keyword_list = list()    for item in l:       if item["user"] == name:            # Get the keywords for a given entry in "l"            # and place them in a dictionary with the area keyword from "l"            keyword_list = item["keywords"].split("$")            area_dict[item["area"]] = keyword_list    # Pack it all together in the result list.    user_dict["name"] = name    user_dict["areas"] = area_dict    result.append(user_dict)这使:[   {'name': 'maria', 'areas': {'US & Canada': ['New York'], 'Latin America ': ['Brazil']}},   {'name': 'nikos', 'areas': {'Africa': ['Kenya', 'Egypt'], 'Europe': ['Brexit']}}]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python