1

I am not sure if this thing has a name, so I couldn't find any information online so far, although surely there is!

Imagine my MWE:

def PlotElementsDict(dictionary1, dictionary2, itemToPlot, title):
    # dictionary 1 and dictionary 2 are collections.OrderedDict with 'key':[1,2,3]
    # i.e. there values of the keys are lists of numbers
    list1 = [dictionary1[key][itemToPlot] for key in dictionary1.keys()]
    list2 = [dictoinary2[key][itemToPlot] for key in dictionary2.keys()]
    plt.plot(list1, label='l1, {}'.format(itemToPlot)
    plt.plot(list2, label = 'l2, {}'.format(itemToPLot')
    plt.legend()
    plt.title(title)
    return plt.show()

How can I create a function (but my question is even more general, I would like to be able to do this for a class as well) which takes a variable number of parameters of a certain type (for example n dictionaries) plus other parameters which you need only one? (for instance item to plot or could be title)?

In practice I would like to create a function (in my MWE) that no matter how many dictionaries I feed into the function, it manages to plot the given items of that dictionary given a common title and item to plot

4

1 Answer 1

2

Solution with asterisk (*)

This would be a perfect case for pythons asterisk argument style, like so:

def PlotElementsDict(itemToPlot, title, *dictionaries):
    for i, dct in enumerate(dictionaries):
        lst = [dct[key][itemToPlot] for key in dct]
        plt.plot(lst, label='l{}, {}'.format(i, itemToPlot))

    plt.legend()
    plt.title(title)
    plt.show()

Example use case:

dct1 = {'key' : [1,2,3]}
dct2 = {'key' : [1,2,3]}
dct3 = {'key' : [1,2,3]}

title = 'title'

itemToPlot = 2

PlotElementsDict(itemToPlot, title, dct1, dct2, dct3)

Arguments in front

If you want the dictionaries to come first, the other arguments have to be keyword only:

def PlotElementsDict(*dictionaries, itemToPlot, title):
    pass

And call it with explicit argument names

PlotElementsDict(dct1, dct2, dct3, itemToPlot=itemToPlot, title=title)
Sign up to request clarification or add additional context in comments.

3 Comments

Amazing! That is exactly what I was looking for!
What should I write when actually calling the function, so that Python understands which are the dictionaries and which are not?
Added an example use case. Python understand by the position of the arguments.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.