我有一个价值字典。这是公司名称。
它具有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()方法?但是我不知道该如何打电话来获取“结果”的内幕。
答案 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返回输出