如何知道python中的字典中是否存在某些内容

问题描述 投票:3回答:5

我正在使用API​​,其中的信息将是这样的:

"id": "17",
"address": "Av. Nossa Senhora de Copacabana",
"addressComplement": "A",
"number": "945",
"cityId": "2",
"cityName": "Rio de Janeiro",
"state": "Rio de Janeiro",
"uf": "RJ",
"neighborhood": "Copacabana",
"properties": {},
"telephones": [],
"geolocation": {
    "lat": -22.97625,
    "lng": -43.19002
},

但是,在某些记录中,它不包含geolocation字段,因此我必须检查代码中是否存在geolocation

我试图用hasattr做这个伎俩,但我觉得我做错了。

这是我的代码的一部分:

if hasattr(i, 'geolocation'):
    address_lat = i['geolocation']['lat']
    address_lng = i['geolocation']['lng']
else:
    address_lat = 0.0
    address_lng = 0.0

我的想法是,它将检查在i指数geolocation的位置是否存在。如果有东西,则返回true并进入条件,否则var将接收0.0

那么,我做错了什么?这是使用hasattr的正确方法吗?

python
5个回答
10
投票

它比那简单:

address_lat = i['geolocation']['lat'] if 'geolocation' in i else 0.0
address_lng = i['geolocation']['ing'] if 'geolocation' in i else 0.0

hasattr可用于检查对象是否具有属性。这是一个更具体的情况,你只需要检查密钥是否是in字典。

一个小小的抱怨:i是一个混乱的字典名称,乍一看我认为这是一个索引。更好地将其重命名为有意义的东西!


9
投票

您可以使用dict.get方法,该方法允许提供默认值,如果密钥不存在,将返回该值,例如喜欢:

geolocation = i.get('geolocation', {"lat": 0., "lng": 0.})

1
投票

你可以使用try except条款:

try:
    address_lat = i['geolocation']['lat']
    address_lng = i['geolocation']['lng']
except KeyError:
    address_lat = 0.0
    address_lng = 0.0

1
投票

hasattr通常用于物体。

>>> class A:
...     i = 10
...
>>> hasattr(A(), 'i')
True

在您的情况下,检查字典中是否存在密钥的最佳方法是执行类似的操作

data = {'geolocation': 0.0}
if 'geolocation' in data:
     ...do something

1
投票

如果它们不存在,您可以使用get并设置lat和lng的默认值。

geolocation = i.get('geolocation',{"lat": 0,"lng":0})
address_lat = geolocation['lat']
address_lng = geolocation['lng']
© www.soinside.com 2019 - 2024. All rights reserved.