gpt4 book ai didi

python - python 列表理解中缺失值的干净解决方案

转载 作者:行者123 更新时间:2023-11-28 21:58:27 24 4
gpt4 key购买 nike

有什么方法可以干净优雅地检查列表理解的每个元素吗?

例如,如果我有一些数据库结果可能有也可能没有“loc”属性,有什么方法可以让下面的代码在不崩溃的情况下运行?

db_objs    = SQL("query")
top_scores = [{"name":obj.name, "score":obj.score, "latitude":obj.loc.lat, "longitude":obj.loc.lon} for obj in db_objs]

如果有任何方法可以将这些字段填充为 None 或空字符串或任何内容,那就太好了。 Python 往往是一个神奇的东西,所以如果你们中的任何人有明智的建议,我们将不胜感激。

最佳答案

干净统一的解决方案:

from operator import attrgetter as _attrgetter

def attrgetter(attrname, default=None):
getter = _attrgetter(attrname)
def wrapped(obj):
try:
return getter(obj)
except AttributeError:
return default

return wrapped

GETTER_MAP = {
"name":attrgetter('name'),
"score":attrgetter('score'),
"latitude":attrgetter('loc.lat'),
"longitude":attrgetter('loc.lon'),
}

def getdict(obj):
return dict(((k,v(obj)) for (k,v) in GETTER_MAP.items()))

if __name__ == "__main__":
db_objs = SQL("query")
top_scores = [getdict(obj) for obj in db_objs]
print top_scores

关于python - python 列表理解中缺失值的干净解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18286408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com