【问题标题】:Is there an efficient way to retrieve values from dictionary有没有一种从字典中检索值的有效方法
【发布时间】:2020-10-31 00:09:38
【问题描述】:

我有一本价值观字典。这是一个公司名称。

它有 3 个键:

{'html_attributions': [],
 'result' : {'Address': '123 Street', 'website' :'123street.com' 
 'status': 'Ok' }

我有一个包含许多字典的数据框。我想遍历每一行的字典并获取我想要的必要信息。

目前我正在编写 for 循环来检索这些信息。有没有更有效的方法来检索这些信息?

addresses = []
for i in range(len(testing)):
    try:
        addresses.append(testing['Results_dict'][i]['result']['Address'])
    except:
        addresses.append('No info')

我所拥有的一切都很好。但是,我想要一些更有效的东西。也许使用 get() 方法?但我不知道如何调用以获取“结果”的内部信息。

【问题讨论】:

  • testing['Results_dict'][i]['result'].get('Address', 'No info')?
  • @Timus 对!谢谢。还有另一种方法可以在没有for循环的情况下循环吗?因为我需要为每一行循环我不确定如果没有 for 循环它会如何工作
  • 阅读2。在这里回答:How to iterate over rows in a DataFrame in Pandas。在这里,您可以使用apply() 或进行列表综合。

标签: python pandas


【解决方案1】:

试试这个:

def get_address(r):
    try:
        return r['result']['Address']
    except Exception:
        return 'No info'

addresses = df['Results_dict'].map(get_address)

这可以防止 Result_dict 为 None、不是 dict 或路径上的任何键不存在的情况。

【讨论】:

  • 谢谢,这就是我要找的东西
【解决方案2】:

如果数据很大,这是一种更快的解决方案:

addresses = list(map(lambda x: x.get('result').get('Address', 'No info'), testing['Results_dict']))

【讨论】:

    【解决方案3】:

    这是我处理嵌套字典键的方式:

    例子:

    def keys_exists(element, *keys):
        if not isinstance(element, dict):
            raise AttributeError('keys_exists() expects dict as first argument.')
        if len(keys) == 0:
            raise AttributeError('keys_exists() expects at least two arguments, 
                  one given.')
    
        _element = element
        for key in keys:
        try:
            _element = _element[key]
        except KeyError:
            return False
    return True
    

    对于数据:

    {'html_attributions': [],
     'result' : {'Address': '123 Street', 'website' :'123street.com' 
     'status': 'Ok' }
    

    如果您想检查结果是否存在或不使用上述功能

    `print 'result (exists/Not): {}'.format(keys_exists(data,"result"))` 
    

    检查地址是否存在于结果中试试这个

    `print 'result > Address (exists/not): {}'.format(keys_exists(data, "result", "Address"))`
    

    它将以真/假返回输出

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多