Как изменить строковые значения и преобразовать их в int, bool и т. Д.?

#python

Вопрос:

Ниже приведена функция, которую я пытаюсь определить, однако безуспешно. Я могу использовать встроенные модули python, чтобы завершить это.

 def clean_data(data: List[List[str]]) -gt; None:  """Modify data so that the applicable string values are converted to their  appropriate type.   The indexes of the string values that are converted, and their  corresponding type, are:  - COLUMN_RIDING is an int  - COLUMN_VOTER is an int  - COLUMN_RANK is a list of strings  - COLUMN_RANGE is a list of integers  - COLUMN_APPROVAL is a list of booleans   gt;gt;gt; row = ['0', '1', 'NDP;Liberal;Green;CPC', '1;4;2;3', 'NO;YES;NO;NO']  gt;gt;gt; clean_data([row])  gt;gt;gt; row == SAMPLE_DATA_1[0]  True  gt;gt;gt; row = ['117', '12', 'Liberal;CPC;NDP;Green', '4;0;5;0', 'YES;NO;YES;NO']  gt;gt;gt; clean_data([row])  gt;gt;gt; row == [117, 12, ['CPC', 'GREEN', 'LIBERAL', 'NDP'], [4, 0, 5, 0], [True, False, True, False]  True  """    clean = []  for i in range(len(data)):  if COLUMN_RIDING[i] == str:  clean.append(  return clean  

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

1. Пожалуйста, проясните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы выделить именно то, что вам нужно. Поскольку это написано в настоящее время, трудно точно сказать, о чем вы просите.

Ответ №1:

Основываясь на вашем примере:

 gt;gt;gt; row = ['117', '12', 'Liberal;CPC;NDP;Green', '4;0;5;0', 'YES;NO;YES;NO'] gt;gt;gt; clean_data([row]) gt;gt;gt; row == [117, 12, ['CPC', 'GREEN', 'LIBERAL', 'NDP'], [4, 0, 5, 0], [True, False, True, False]  

У вас есть правильное представление о циклическом просмотре данных.

Похоже, что COLUMN_RANK, COLUMN_RANGE и COLUMN_APPROVAL являются списками, разделенными знаком»;». Поэтому, если мы найдем «;» в строке, мы должны разделить строку и повторить ее. Когда мы выполняем итерацию, мы должны определить, является ли это либо целым числом, ДА/НЕТ для логического значения, либо в противном случае это строка.

Если это COLUMN_RIDING или COLUMN_VOTER, просто добавьте целое число

 def clean_data(data):  clean = []  for column in data:  if ";" in column:  tmp = []  for value in column.split(";"):  if value.isdigit(): #'4;0;5;0'  tmp.append(int(value))  elif value == "YES":  tmp.append(bool(value))  elif value == "NO":  tmp.append(False)  else: #['CPC', 'GREEN', 'LIBERAL', 'NDP']  tmp.append(value.upper())  clean.append(tmp)  else:  clean.append(int(column))  return clean