从旧词典创建新词典

2024-04-20 06:57:05 发布

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

我正在尝试从旧字典创建一个新字典,以便只获取将来在df中新创建的值。但是我创建的函数总是返回相同的key+值。你知道吗

def load_data():

    with open('./data/awards.json', 'r') as file:
        json_file = json.load(file)        

    events_dict = {}

    for data_raw in json_file:
        events_dict['event'] = (data_raw['Event'])

        #form categories_list
        categories_list = []
        for all_data in data_raw['Data']:
            for awards_data in all_data['nomineesWidgetModel']['eventEditionSummary']['awards']:

                #check if it's a premium category
                if categories_data['isPremiumCategory'] == True:
                    for categories_data in awards_data['categories']:
                        categories = {}
                        categories['category_name'] = (categories_data['categoryName'])

                        #form nomination_list
                        nomination_list = []
                        for nominations_data in categories_data['nominations']:

                            primary_nominees = nominations_data['primaryNominees']
                            if len(primary_nominees)>0:
                                nominee1 = primary_nominees[0]['name']

                            secondary_nominees = nominations_data['secondaryNominees']
                            if len(secondary_nominees)>0:
                                nominee2 = secondary_nominees[0]['name']

                            nomination_list.append([nominee1, nominee2, nominations_data['isWinner']])

                        categories['nominations'] = nomination_list                    
                        categories_list.append(categories)
                    events_dict['categories'] = categories_list

    return events_dict

我的目的是获得每一个奖项的类别,提名,如果它是一个赢家或没有。我现在得到的是同一事件的11倍。你知道吗

我试过改变缩进,先把dict附加到一个列表中,但是没有任何帮助。。。我确信这是一个非常基本的东西,但是我对Python还很陌生,没有看到我的错误。你知道吗

json file

有可能这样做吗?你知道吗


Tags: injsonfordatarawifeventsdict
1条回答
网友
1楼 · 发布于 2024-04-20 06:57:05

你的逻辑有点错误。您想在循环中初始化您的events_dict = {},然后您可以将其附加到一个列表中,我将其命名为results。你知道吗

def load_data():

    with open('C:/test/awards.json', 'r') as file:
        json_file = json.load(file)        


    results = []  #<   initialize result list
    for data_raw in json_file:
        events_dict = {} #< - here initialize your dictionary then build it
        events_dict['event'] = data_raw['Event']

        #form categories_list
        categories_list = []
        for all_data in data_raw['Data']:
            for awards_data in all_data['nomineesWidgetModel']['eventEditionSummary']['awards']:

                #check if it's a premium category
                for categories_data in awards_data['categories']:    #<   Need to switch this line
                    if categories_data['isPremiumCategory'] == True:  #< -This needs to follow your loop
                        categories = {}
                        categories['category_name'] = (categories_data['categoryName'])

                        #form nomination_list
                        nomination_list = []
                        for nominations_data in categories_data['nominations']:

                            primary_nominees = nominations_data['primaryNominees']
                            if len(primary_nominees)>0:
                                nominee1 = primary_nominees[0]['name']
                            else:
                                nominee1 = ''


                            secondary_nominees = nominations_data['secondaryNominees']
                            if len(secondary_nominees)>0:
                                nominee2 = secondary_nominees[0]['name']
                            else:
                                nominee2 = ''


                            nomination_list.append([nominee1, nominee2, nominations_data['isWinner']])

                        categories['nominations'] = nomination_list                    
                        categories_list.append(categories)
                        events_dict['categories'] = categories_list
            results.append(events_dict) #<   once that dictionary is filled, you can append it into that result list, then move on to make a new events_dict with the next iteration

    return results

相关问题 更多 >