<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _parse_signal_lines(signal_lines):
 """ Extract fields from a list of signal line strings into a dictionary. """

    n_sig = len(signal_lines)
    # Dictionary for signal fields
    signal_fields = {}

    # Each dictionary field is a list
    for field in SIGNAL_SPECS.index:
        signal_fields[field] = n_sig * [None]

    # Read string fields from signal line
    for ch in range(n_sig):
        (signal_fields['file_name'][ch], signal_fields['fmt'][ch],
         signal_fields['samps_per_frame'][ch], signal_fields['skew'][ch],
         signal_fields['byte_offset'][ch], signal_fields['adc_gain'][ch],
         signal_fields['baseline'][ch], signal_fields['units'][ch],
         signal_fields['adc_res'][ch], signal_fields['adc_zero'][ch],
         signal_fields['init_value'][ch], signal_fields['checksum'][ch],
         signal_fields['block_size'][ch],
         signal_fields['sig_name'][ch]) = _rx_signal.findall(signal_lines[ch])[0]

        for field in SIGNAL_SPECS.index:
            # Replace empty strings with their read defaults (which are mostly None)
            # Note: Never set a field to None. [None]* n_sig is accurate, indicating
            # that different channels can be present or missing.
            if signal_fields[field][ch] == '':
                signal_fields[field][ch] = SIGNAL_SPECS.loc[field, 'read_default']

                # Special case: missing baseline defaults to ADCzero if present
                if field == 'baseline' and signal_fields['adc_zero'][ch] != '':
                    signal_fields['baseline'][ch] = int(signal_fields['adc_zero'][ch])
            # Typecast non-empty strings for numerical fields
            else:
                if SIGNAL_SPECS.loc[field, 'allowed_types'] is int_types:
                    signal_fields[field][ch] = int(signal_fields[field][ch])
                elif SIGNAL_SPECS.loc[field, 'allowed_types'] is float_types:
                    signal_fields[field][ch] = float(signal_fields[field][ch])
                    # Special case: adc_gain of 0 means 200
                    if field == 'adc_gain' and signal_fields['adc_gain'][ch] == 0:
                        signal_fields['adc_gain'][ch] = 200.

    return signal_fields