Я хотел получить массив целых чисел типа [1,2,3]
но получил [dict_values([1]),dict_values([2]),dict_values([3])]

taken_employee_ids_dict = [{'id': 1}, {'id': 2}, {'id': 3}]

Мой код

taken_employee_ids = [str(taken_employee_ids_list.values()) for taken_employee_ids_list in taken_employee_ids_dict]

in_values_check = ','.join(str(id) for id in taken_employee_ids)

И тогда in_values_check должен войти:

qry = "SELECT CONCAT(first_name, ',', surname) AS full_name, id \
            FROM employees \
            WHERE date_terminated IS NULL \
            and id NOT IN " + "(" + in_values_check + ")" \
            " ORDER BY first_name, surname ASC"

Извините, я новичок в python, спасибо

0
Jason Polydor 16 Янв 2022 в 18:11
Не могли бы вы опубликовать, как выглядит taken_employee_ids_dict?
 – 
Lukas Schneider
16 Янв 2022 в 18:13
Я обновил его спасибо
 – 
Jason Polydor
16 Янв 2022 в 18:14
Предоставьте минимальный воспроизводимый пример, это действительно необходимо.
 – 
Ulrich Eckhardt
16 Янв 2022 в 18:25

4 ответа

Лучший ответ

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

С Лямбдой

taken_employee_ids_dict = [{'id': 1}, {'id': 2}, {'id': 3}]
in_values_check = list(map(lambda x : x['id'], taken_employee_ids_dict))
print(in_values_check)

С пониманием списка,

taken_employee_ids_dict = [{'id': 1}, {'id': 2}, {'id': 3}]
in_values_check = [dic['id'] for dic in taken_employee_ids_dict]
print(in_values_check)

Вывод:

[1, 2, 3]
1
Always Sunny 16 Янв 2022 в 18:27
taken_employee_ids = list(map(lambda x : x['id'], taken_employee_ids_dict)) in_values_check = ','.join(str(id) for id in taken_employee_ids)
 – 
Jason Polydor
16 Янв 2022 в 18:32
1
Большое спасибо
 – 
Jason Polydor
16 Янв 2022 в 18:34
Удачи :)
 – 
Always Sunny
16 Янв 2022 в 18:39

Для такой проблемы обычно применяется понимание списка:

taken_employee_ids_dict = [{'id': 1}, {'id': 2}, {'id': 3}]
in_values_check = [employee["id"] for employee in taken_employee_ids_dict]
print(in_values_check)

Это выводит

[1, 2, 3]
3
Tom Aarsen 16 Янв 2022 в 18:25

Вы можете использовать что-то вроде этого.

taken_employee_ids_dict = [{'id': 1}, {'id': 2}, {'id': 3}]
final_list = []
for ele in taken_employee_ids_dict:
  for key,value in ele.items():
    final_list.append(value)
print(final_list)
0
udaykumar gajavalli 16 Янв 2022 в 18:25

Попробуй это:

taken_employee_ids = [str(employee["id"]) for employee in taken_employee_ids_dict]

in_values_check = ','.join(str(id) for id in taken_employee_ids)
0
Lukas Schneider 16 Янв 2022 в 18:39
Не работает, я получил AttributeError: объект «список» не имеет атрибута «значения». между я использую python 3.9
 – 
Jason Polydor
16 Янв 2022 в 18:16