2016-04-18 2 views
1

Для многих объектов перед вызовом .append() я сделать что-то вроде:Один лайнер, если индекс оленья кожа существует

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

Есть ли Oneliner в Python, чтобы сделать это?

После некоторых ответов, вот мой код вида:

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

Если вы можете работать с dicts вместо этого, использовать [defaultdict] (https://docs.python.org/2/library/collectio ns.html # collections.defaultdict). – fedorqui

+1

'd ['turn'] = [] если не d.get ('turn')'? – KeyWeeUsr

+0

Я уточнил свой вопрос, а точнее –

ответ

3

Есть ли oneliner в Python для этого?

Да

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] 
+0

Я поднял вас, потому что он точно отвечает на мой вопрос, хотя другие ответы очень интересны. Большое спасибо. –

0

Ну, вы можете "oneline" его с помощью:

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

Почему бы не прямо 'd ['turn'] = d.get ('turn', [])'? – stellasia

+0

Отличная идея, я не знаю, лучше ли другой, чем другой. – Aurel

+0

И Python не нужен «' else », как' d ['turn'] = [], если не d.get ('turn') '** else ... ** ?? –

4

Вы можете использовать defaultdict:

from collections import defaultdict 

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

Другой вариант заключается в использовании setdefault:

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

UPDATE Учитывая полный код можно либо написать

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}) 
3

в зависимости от того, если прибудете стандартна, она, вероятно, имеет возможность указать возврат по умолчанию, если этот пункт не найден, поэтому

d.get('turns', []) 

даст вам значение, если оно существует, или [], если это не так.

Смежные вопросы