#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}