Search code examples
pythondictionaryoptional-arguments

Function with dictionaries as optional arguments - Python


I'm trying to create a function that might receive as input many or a few dictionaries. I'm using the following code:

def merge_many_dics(dic1,dic2,dic3=True,dic4=True,dic5=True,dic6=True,dic7=True,dic8=True,dic9=True,dic10=True):
"""
Merging up to 10 dictionaries with same keys and different values
:return: a dictionary containing the common dates as keys and both values as values
"""
manydics = {}
for k in dic1.viewkeys() & dic2.viewkeys() & dic3.viewkeys() & dic4.viewkeys() & dic5.viewkeys() & dic6.viewkeys()\
        & dic7.viewkeys() & dic8.viewkeys() & dic9.viewkeys() & dic10.viewkeys():
    manydics[k] = (dic1[k], dic2[k],dic3[k],dic4[k],dic5[k],dic6[k],dic7[k],dic8[k],dic9[k],dic10[k])

return manydics

Note that I'm trying to equal the arguments dic3, dic4, dic5 and so on to "True", so when they are not specified and are called in the function nothing happens. However I'm getting the following error:

Traceback (most recent call last):
File "/Users/File.py", line 616, in <module>
main_dic=merge_many_dics(dic1,dic2,dic3,dic4)
File "/Users/File.py", line 132, in merge_many_dics
& dic7.viewkeys() & dic8.viewkeys() & dic9.viewkeys() & dic10.viewkeys():
AttributeError: 'bool' object has no attribute 'viewkeys'

Anyone to enlight my journey available?


Solution

  • Using arbitrary argument list, the function can be called with an arbitrary number of arguments:

    >>> def merge_many_dics(*dicts):
    ...     common_keys = reduce(lambda a, b: a & b, (d.viewkeys() for d in dicts))
    ...     return {key: tuple(d[key] for d in dicts) for key in common_keys}
    ...
    >>> merge_many_dics({1:2}, {1:3}, {1:4, 2:5})
    {1: (2, 3, 4)}