使用python从嵌套字典中获取特定键的值

2024-05-29 03:05:12 发布

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

我正在遍历pandas dataframe中的行,从特定列打印出嵌套字典。我的嵌套字典如下所示:

{'dek': "<p>Don't forget to buy a card</p>",
 'links': {'edit': {'dev': '//patty-menshealth.feature.net/en/content/edit/76517422-96ad-4b5c-a24a-c080c58bce0c',
   'prod': '//patty-menshealth.prod.com/en/content/edit/76517422-96ad-4b5c-a24a-c080c58bce0c',
   'stage': '//patty-menshealth.stage.net/en/content/edit/76517422-96ad-4b5c-a24a-c080c58bce0c'},
  'frontend': {'dev': '//menshealth.feature.net/trending-news/a19521193/fathers-day-weekend-plans/',
   'prod': '//www.menshealth.com/trending-news/a19521193/fathers-day-weekend-plans/',
   'stage': '//menshealth.stage.net/trending-news/a19521193/fathers-day-weekend-plans/'}},
 'header': {'title_color': 1, 'title_layout': 1},
 'sponsor': {'program_type': 1, 'tracking_urls': []},
 'social_dek': "<p>Don't forget to buy a card</p>",
 'auto_social': 0,
 'index_title': "\u200bWeekend Guide: Treat Your Dad Right This Father's Day",
 'short_title': "Treat Your Dad Right This Father's Day",
 'social_title': "\u200bWeekend Guide: Treat Your Dad Right This Father's Day",
 'editors_notes': '<p>nid: 2801076<br>created_date: 2017-06-16 13:00:01<br>compass_feed_date: 2017-06-21 14:01:58<br>contract_id: 40</p>',
 'seo_meta_title': "Treat Your Dad Right This Father's Day\u200b | Men’s Health",
 'social_share_url': '/trending-news/a19521193/fathers-day-weekend-plans/',
 'seo_related_links': {},
 'editor_attribution': 'by',
 'hide_from_homepage': 1,
 'syndication_rights': 3,
 'seo_meta_description': "\u200bFrom gifts to food ideas, we've got your Father's Day covered. Just don't forget to buy him a card."}

我使用以下代码:

def recursive_items(dictionary):
    for key, value in dictionary.iteritems():
        if type(value) is dict:
            yield from recursive_items(value)
        else:
            yield (key, value)

for key, value in recursive_items(merged_df["metadata_y"]):
    print(key, value)    

如何获取特定键的值?我试图使用print(key[5], value包含我要获取的键的索引。它给了我一个错误:TypeError:“int”对象不可下标

我怎样才能获得价值呢


Tags: tokeynettitlevalueeditstagenews
2条回答

抱歉没有直接解决原始问题,但也许值得使用json_normalize来“展平”嵌套列

例如,如果示例数据名为dictionary

from pandas.io.json import json_normalize

# Flatten the nested dict, resulting in a DataFrame with 1 row and 23 columns
this_df = json_normalize(dictionary)

# Inspect the resulting columns. Is this structure useful?
this_df.columns
Index(['dek', 'social_dek', 'auto_social', 'index_title', 'short_title',
       'social_title', 'editors_notes', 'seo_meta_title', 'social_share_url',
       'editor_attribution', 'hide_from_homepage', 'syndication_rights',
       'seo_meta_description', 'links.edit.dev', 'links.edit.prod',
       'links.edit.stage', 'links.frontend.dev', 'links.frontend.prod',
       'links.frontend.stage', 'header.title_color', 'header.title_layout',
       'sponsor.program_type', 'sponsor.tracking_urls'],
      dtype='object')
data={'dek': "<p>Don't forget to buy a card</p>",
'links': {'edit': {'dev': '//patty-menshealth.feature.net/en/content/edit/76517422-96ad-4b5c-a24a-c080c58bce0c',
'prod': '//patty-menshealth.prod.com/en/content/edit/76517422-96ad-4b5c-a24a-c080c58bce0c',
'stage': '//patty-menshealth.stage.net/en/content/edit/76517422-96ad-4b5c-a24a-c080c58bce0c'},
'frontend': {'dev': '//menshealth.feature.net/trending-news/a19521193/fathers-day-weekend-plans/',
'prod': '//www.menshealth.com/trending-news/a19521193/fathers-day-weekend-plans/',
'stage': '//menshealth.stage.net/trending-news/a19521193/fathers-day-weekend-plans/'}},
'header': {'title_color': 1, 'title_layout': 1},
'sponsor': {'program_type': 1, 'tracking_urls': []},
'social_dek': "<p>Don't forget to buy a card</p>",
'auto_social': 0,
'index_title': "\u200bWeekend Guide: Treat Your Dad Right This Father's Day",
'short_title': "Treat Your Dad Right This Father's Day",
'social_title': "\u200bWeekend Guide: Treat Your Dad Right This Father's Day",
'editors_notes': '<p>nid: 2801076<br>created_date: 2017-06-16 13:00:01<br>compass_feed_date: 2017-06-21 14:01:58<br>contract_id: 40</p>',
'seo_meta_title': "Treat Your Dad Right This Father's Day\u200b | Men’s Health",
'social_share_url': '/trending-news/a19521193/fathers-day-weekend-plans/',
'seo_related_links': {},
'editor_attribution': 'by',
'hide_from_homepage': 1,
'syndication_rights': 3,
'seo_meta_description': "\u200bFrom gifts to food ideas, we've got your Father's Day covered. Just don't forget to buy him a card."}

def findValByKey(key:str, data:dict, level=0):
    for i in data.keys():
        print("{} {}".format(level*'-', i))
        if i==key:
            print(' -found -')
            return data[key]
        elif isinstance(data[i], dict):
            res = findValByKey(key, data[i], level+1)
            if res:
                return res


print(findValByKey('title_color', data))

相关问题 更多 >

    热门问题