Тьфу. Если вам нужно что-то, что читаемо вместо чрезмерно плотного соединения, здесь:
def build_str(r):
tableGenString = ""
for k,v in r.iteritems():
if tableGenString != "":
tableGenString += ", "
tableGenString += "%s %s" % (k, type(v))
return tableGenString
Пример возвращаемого значения:
baz <type 'str'>, have a list <type 'list'>, foo <type 'int'>, bar <type 'str'>, or a tuple <type 'tuple'>
И чтобы кто-то не жаловался, что это как-то медленнее, чем объединение ... это не на моей коробке:
import timeit
r = {
"foo": 123,
"bar": "456",
"baz": "abcd",
"have a list": [7, 8, "efgh"],
"or a tuple": (9, 0, 10),
}
def build_str(r):
tableGenString = ""
for k,v in r.iteritems():
if tableGenString != "":
tableGenString += ", "
tableGenString += "%s %s" % (k, type(v))
return tableGenString
if __name__ == '__main__':
readable_time = timeit.Timer("build_str(r)", "from __main__ import build_str, r").timeit()
print "Readable time: %f" % (readable_time,)
join_time = timeit.Timer("', '.join('%s %s' % (k, type(v)) for k, v in r.iteritems())", "from __main__ import r").timeit()
print "Join time: %f" % (join_time,)
...
$ python concat.py
Readable time: 4.705579
Join time: 5.277732
$