Pythonic способ заполнения словаря из списка записей

#python

#python

Вопрос:

Предыстория

У меня есть вызываемый модуль db.py , который в основном состоит из функций-оболочек, которые выполняют вызовы в БД. У меня есть таблица с именем nba, в которой есть столбцы типа player_name age player_id etc.

У меня есть простая вызываемая функция db_cache() , в которой я вызываю таблицу БД и запрашиваю все идентификаторы игроков. Вывод response выглядит примерно так

 [Record(player_id='31200952409069'), Record(player_id='31201050710077'), Record(player_id='31201050500545'), Record(player_id='31001811412442'), Record(player_id='31201050607711')]
 

Затем я просто перебираю список и помещаю каждый элемент в словарь.

Мне интересно, есть ли более питонический способ заполнения словаря?

Мой код

   def db_cache():
        my_dict: Dict[str, None] = {}
        response = db.run_query(sql="SELECT player_id FROM nba")
        for item in response:
            my_dict[item.player_id] = None
        return my_dict
    
    
    my_dict = db_cache()
 

Комментарии:

1. Какова именно цель словаря? Почему инициализируются значения None ?

Ответ №1:

Это встроено в dict тип:

 >>> help(dict.fromkeys)
Help on built-in function fromkeys:

fromkeys(iterable, value=None, /) method of builtins.type instance
    Create a new dictionary with keys from iterable and values set to value.
 

value Мы хотим по умолчанию None , поэтому все, что нам нужно, это:

 my_dict = dict.from_keys(db.run_query(sql="SELECT player_id FROM nba"))
 

Обратите внимание, что value он будет использоваться повторно, а не копироваться, что может вызвать проблемы, если вы хотите использовать изменяемый value . В этих случаях вам следует вместо этого просто использовать понимание dict, как указано в ответе @AvihayTsayeg .

Ответ №2:

 my_arr = [1,2,3,4]
my_dict = {"item":item for item in my_arr}