.get
будет использоваться при доступе к словарю users
. Вы можете добавить второй параметр к вызову по умолчанию (в случае, если вы не найдете такой ключ), который при первом вызове должен вывести пустой словарь, чтобы второй .get
не вышел из строя.
lb = list(map(lambda m: (m, users.get(m.id, {}).get("xp"), message.server.members))
Поскольку вы делаете из него список, вы также можете попробовать (несколько более питонное) понимание списка (не то, что в вашей строке что-то не так с ним):
lb = [ (m, users.get(m.id, {}).get("xp") for m in message.server.members ]
Обратите внимание, что оба подхода вернут элемент None, когда get не найдет Ключ в словаре, вы можете пропустить это, используя предложение if
в понимании списка:
lb = [ (m, users.get(m.id, {}).get("xp") for m in message.server.members if m.id in users ]
В качестве примечания добавлю, что вы включили все в предложение менеджера контекста (with open():
), в то время как необходима только строка, в которую вы загружаете его содержимое. Лучше было бы деиндентировать оставшуюся часть кода.