<p>要求有点模糊(根是否应该排序?),但这里有一个工作示例(至少对于op中的输入文件和输出),我包括了一些注释来解释算法是如何工作的</p>
<pre><code>roots_dict = {} # Data structure to hold the roots and connections
reading_root = False # A simple state machine to know whether we are reading a root
prev_root = None
# A little function to fill the requirement "Consider only first word & remove first letter"
def get_line_item(line):
# This check is for when you reach the end of the file and there is no new line
if len(line) == 0:
return False
newline_removed = line[:(-1 if line[-1] == '\n' else len(line))] # Remove the final character if it is a newline, otherwise slice the whole line
line_words = newline_removed.split(' ') # Split the characters on the line into a list of space separated words
return line_words[0][1:] # Return the first word, and only the characters starting from the second (ie, the 1th element)
with open('inputfile.txt', 'r') as f:
line = True
while line:
line = f.readline()
if line[:4] == 'LIST':
reading_root = True
continue
if reading_root:
root = get_line_item(line)
if root not in roots_dict:
roots_dict[root] = []
prev_root = root
reading_root = False
continue
connection = get_line_item(line)
if connection:
roots_dict[prev_root].append(connection)
# Printing in the format as described by the op. This could easily be written to an output file
for k in roots_dict:
print(f'LIST {k} :\t', end='')
for i in roots_dict[k]:
print(f'{i}\t', end='')
print()
</code></pre>