Манипуляция списком Python с добавочными дополнениями - PullRequest
0 голосов
/ 19 октября 2019

У меня есть список Python (версия 3.6 в AWS Glue с PySpark):

['id', 'account_id', 'lab_order_id', 'match_status', 'report_date', 'message', 'reporting_states', 'state_messages', 'overall_consistency', 'alerts', 'run_datetime_partition', 'run_datetime']

Я хотел бы получить результирующую строку из списка, которая будет выглядеть следующим образом:

$1 "ID", $2 "ACCOUNT_ID", $3 "LAB_ORDER_ID", $4 "MATCH_STATUS", $5 "REPORT_DATE", $6 "MESSAGE", $7 "REPORTING_STATES", $8 "STATE_MESSAGES", $9 "OVERALL_CONSISTENCY", $10 "ALERTS", $11 "RUN_DATETIME"

До сих пор я закрывал строку без увеличения $ num перед каждым указанным именем. Мне нужно, чтобы приращение было динамическим, поскольку не каждая таблица будет иметь одинаковое количество столбцов.

# Variable List
column_names = final_table_data_frame.schema.names
column_strings = ('","').join(column_names).upper().replace(',"RUN_DATETIME_PARTITION"','')
var_list = '"' + column_strings + '"'

Где элемент column_names получен из схемы предыдущего фрейма данных. Я пытался использовать лямбду, но у меня проблемы с объединением результатов со строкой.

Ответы [ 2 ]

1 голос
/ 19 октября 2019

Вы можете использовать перечисление + f-строка и затем объединение :

lst = ['id', 'account_id', 'lab_order_id', 'match_status', 'report_date', 'message', 'reporting_states', 
       'state_messages', 'overall_consistency', 'alerts', 'run_datetime_partition', 'run_datetime']
result = ', '.join([f'${i} "{e.upper()}"' for i, e in enumerate(lst, 1)])
print(result)

Вывод

$1 "ID", $2 "ACCOUNT_ID", $3 "LAB_ORDER_ID", $4 "MATCH_STATUS", $5 "REPORT_DATE", $6 "MESSAGE", $7 "REPORTING_STATES", $8 "STATE_MESSAGES", $9 "OVERALL_CONSISTENCY", $10 "ALERTS", $11 "RUN_DATETIME_PARTITION", $12 "RUN_DATETIME"
0 голосов
/ 19 октября 2019

Я смог найти решение, используя словарь и дальнейший анализ:

column_names = final_table_data_frame.drop("run_datetime_partition").schema.names
dict = dict(enumerate(column_names, start = 1))
column_strings = (',').join(['$%s "%s"' % (key, value) for (key, value) in dict.items()]).upper()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...