如果索引不存在,则为一个班轮

时间:2016-04-18 15:08:59

标签: python

对于调用.append()之前的很多对象,我做了类似的事情:

if not d.get('turns'):
    d['turns'] = []

Python中是否有一个oneliner来执行此操作?

经过一些回答,这是我的代码:

d = json.loads(str(self.data))
if not d.get('turns'):
    d['turns'] = []
d['turns'].append({
    'date': time_turn,
    'data': data
})

4 个答案:

答案 0 :(得分:4)

您可以使用defaultdict

from collections import defaultdict

d = defaultdict(list)
d['turns'] # []

其他选项是使用setdefault

d.setdefault('turns', []) # []
d.setdefault('turns', 'foo') # []

更新鉴于完整代码,您可以编写

d = defaultdict(list, json.loads(str(self.data)))
d['turns'].append({'date': time_turn, 'data': data})

d = json.loads(str(self.data))
d.setdefault('turns', []).append({'date': time_turn, 'data': data})

答案 1 :(得分:3)

取决于get是否为标准,如果找不到该项,它可能会选择指定默认返回,所以

d.get('turns', [])
如果存在,

将给出值,如果不存在,则为[]。

答案 2 :(得分:3)

  

Python中是否有一个oneliner来执行此操作?

d.setdefault('turns', [])

演示:

>>> d = {}
>>> d.setdefault('turns', [])
[] # the inserted value is also returned
>>> d
{'turns': []}

如果找到密钥,setdefault的行为类似于get

>>> d['turns'].append(1)
>>> d.setdefault('turns', 'irrelevant')
[1]

答案 3 :(得分:0)

嗯,你可以使用以下方式“在线”:

d['turns'] = [] if not d.get('turns')