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

Popular posts from this blog

javascript - Create a stacked percentage column -

Optimising Firebase database by automatically overwriting data -

javascript - Angular UI-Grid customTemplate directive causing rows to load slowly/? -