У вас есть порядок смешивания ваших петель; они считаются вложенными слева направо, поэтому for r in a[g]
представляет собой внешний цикл и выполняется первым. Поменяйте петли:
print [r['n'] for g in good for r in a[g]]
Теперь g
определен для следующего цикла for r in a[g]
, и выражение больше не вызывает исключение:
>>> a={
... 1: [{'n': 1}, {'n': 2}],
... 2: [{'n': 3}, {'n': 4}],
... 3: [{'n': 5}],
... }
>>> good = [1,2]
>>> [r['n'] for g in good for r in a[g]]
[1, 2, 3, 4]
Для добавления к тому, что сказал Nick документация MSDN не перечисляет предопределенных имен. Казалось бы что вся потребность прибыть из #define
и /define
.
Зависит от того, какие / определяют параметры компилятора, которые Вы используете. Visual Studio
помещает DEBUG
символ там для Вас через настройки проекта, но Вы могли создать любые, которые Вы хотите.
Ну, это зависит от компилятора, который Вы используете, и параметры командной строки. Моно определяет различные имена, чем компилятор Microsoft по умолчанию, и в зависимости от того, какая система Вы - Вы, становятся отличающимися, определяет, и т.д.
Если Вы обеспечиваете более определенную систему, для которой Вы компилируете, мы смогли придумывать список для той конкретной системы (например: система x64 Vista, с помощью Visual Studio 2008).