Вы смущены ... if ... else ...
conditional expression. Он не является частью цикла, он является частью выражения, генерирующего значение для каждой пары ключ-значение.
Словарь понимание состоит из по меньшей мере одного цикла, с необязательно более петель и if
фильтров на правой стороне, и два выражения слева. Одно выражение для создания ключа, а другое - для создания значения. Вместе эти два выражения делают пару ключ-значение для результирующего словаря:
{key_expression: value_expression for target in iterable}
Условное выражение просто производит значение, основанное на испытании. Либо тест оценивается как истинное и одно значение выбрано, или значение является ложным, а другой выбрал:
true_expression if test else false_expression
только выражение выбрал оценивается; если test
заканчивается как false, выполняется false_expression
, и результат возвращается, true_expression
игнорируется полностью.
Таким образом, словарь понимания вы смотрите на это эквивалент:
data = {}
for n in graph.by_tag('value'):
key = n.attributes['xid']
value = float(n.content) if n.content else np.nan
data[key] = value
Так value
либо установлен float(n.content)
или np.nan
, в зависимости от значения n.content
(truethy или нет).
Многое ясное объяснение. – MJP
Даты понимания dictionay = {n.attributes ['xid']: str (n.content) для n в date.by_tag ('value')}. Могу ли я сокращать понимание dict следующим образом: date = {} для n в date.by_tag ('значение'): даты [n.attributes ['xid']] = str (n.content) – MJP
Почти, но вы нужно использовать другое имя переменной (вы переписываете «даты» в первой строке). –