Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how can I convert a dictionary to a string of keyword arguments?

we can convert the dictionary to kw using **kw but if I want kw as str(kw) not str(dict), as I want a string with keyword arguments for code_generator,

if I pass

obj.method(name='name', test='test', relation = [('id','=',1)])

I want a function to return the string like

"name='name', test='test', relation = [('id','=',1)]"
like image 351
shahjapan Avatar asked May 10 '10 12:05

shahjapan


2 Answers

The same syntax is used to accept arbitrary keyword arguments.

Python 2:

def somestring(**kwargs):
  return ', '.join('%s=%r' % x for x in kwargs.iteritems())

Python 3:

def somestring(**kwargs):
    return ", ".join(f"{key}={value}" for key, value in kwargs.items())

Note that dicts are arbitrarily ordered, so the resultant string may be in a different order than the arguments passed.

like image 137
Ignacio Vazquez-Abrams Avatar answered Nov 02 '22 14:11

Ignacio Vazquez-Abrams


The upper answer can not run properly on python 2.7.16, it should be

def somestring(**kwargs):
    return ''.join([('%s=%s' % x) for x in kwargs.iteritems()]) 


#A full example:

def RunCommandAndEnsureZero(*args, **kwargs):
    retCode = RunCommand(*args, **kwargs)
    if retCode != 0:
        kwargsString = ''.join([('%s=%s' % x) for x in kwargs.iteritems()])
        raise Exception("error command: \"%s %s\"" % (''.join(args), kwargsString))
like image 28
Alen Wesker Avatar answered Nov 02 '22 13:11

Alen Wesker