python - Generator object to produce kwargs mapping for function -
i have generalised generator function, maps delimited strings yields kwargs-type dictionary object list of delimited strings.
i'd use kwargs-type dictionaries arguments in generator function. however, message
edge_generator() argument after ** must mapping, not generator
here current, broken code:
def line_from_file_generator(file_name): open(file_name) text_file: line in text_file: yield line def map_delimited_lines_to_kwargs(lines, delimiter, kwarg_index_map): line in lines: kwargs = {} args = line.strip().split(delimiter) kwarg, index in kwarg_index_map.items(): kwargs[kwarg] = args[index] yield kwargs def edge_generator(source_node_name, destination_node_name, weights): line in lines: yield edge(source_node_name, destination_node_name, weights) lines = line_from_file_generator('mit_map.txt') kwarg_index_map = {'source_node_name': 0, 'destination_node_name': 1, 'weights': 2} kwarg_collection = map_delimited_lines_to_kwargs(lines, ' ', kwarg_index_map) edges = edge_generator(**kwargs_collection) i understand why wrong (a generator kind of sequence, not mapping (dict can expanded)).
can around whilst keeping abstractions have created? code be? i've tried changing last line below, fails iterate through kwargs generator, , edges generated same arguments.
edges = edge_generator(**kwarg_collection.next())
this how got work. instead of trying expand arguments edge generator in function definition, passed kwargs generator whole, , added loop on kwargs generator in body of edge generator, , expanded arguments when creating edge.
def line_from_file_generator(file_name): open(file_name) text_file: line in text_file: yield line def kwargs_from_delimited_strings_generator(lines, delimiter, kwarg_index_map): line in lines: kwargs = {} args = line.strip().split(delimiter) kwarg, index in kwarg_index_map.items(): kwargs[kwarg] = args[index] yield kwargs def edge_generator(kwargs_collection): kwargs in kwargs_collection: yield edge(**kwargs) lines_from_file = line_from_file_generator('mit_map.txt') kwarg_index_map = {'source_node_name': 0, 'destination_node_name': 1, 'weights': 2} kwargs_from_delimited_strings = kwargs_from_delimited_strings_generator( lines_from_file, ' ', kwarg_index_map) edges_from_kwargs = edge_generator(kwargs_from_delimited_strings)
Comments
Post a Comment