有没有一种有效的方法来从字典中检索值

时间:2020-10-30 15:31:09

标签: python pandas

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

它具有3个键:

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

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

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

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

我所拥有的一切都很好。但是,我希望有一些效率更高的方法。也许使用get()方法?但是我不知道该如何打电话来获取“结果”的内幕。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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 :(得分:0)

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

示例:

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"))`

它将以True / False返回输出