编辑:稍微澄清了这个问题
如何从字典中获取格式为的字符串
key1 = value1
key2 = value2
以相对快速的方式?(相对于普通串联)
编辑:稍微澄清了这个问题
如何从字典中获取格式为的字符串
key1 = value1
key2 = value2
以相对快速的方式?(相对于普通串联)
print '\n'.join('%s = %s' % (key, value) for key, value in d.iteritems())
这里没有理由使用列表推导。
Python 3.x:
for k,v in mydict.items():
print(k, '=', v)
Python 2.x:
for k,v in mydict.iteritems():
print k, '=', v
编辑因为 OP 在另一个答案中的评论:
如果你将它传递给一个函数而不是在这里打印它,那么你应该将生成器传递给函数,或者 dict 本身,让函数处理它需要做的任何事情。
这比将其转换为甚至不需要的范围内的字符串要好得多。该功能应该这样做,因为那是使用它的地方。
我做了一个包装函数,因为编辑主函数是不可能的。
def log_wrap(mydict):
mystr = '\n'.join(['%s = %s' % (k,v) for k,v in mydict.iteritems()])
write_to_log(mydict)
log_wrap(mydict)
显式优于隐式
列表理解是一种创建列表的方法,而不是避免循环。
来自 PEP 202:
列表推导式提供了一种更简洁的方法来在当前使用 map() 和 filter() 和/或嵌套循环的情况下创建列表。
所以你应该问自己:
在 Python 中创建这段代码什么时候有用?它可能更紧凑,但代码的读取次数比编写的次数多,那么它的优势是什么?
Tor Valamo 的解决方案虽然不是原始请求中所要求的,但在我看来更具可读性,因此应该是首选的。
问题更新后编辑
str.join
是从列表中实现快速连接的好方法 - Nadia 和 Ritchie 的回复是如何使用它的好例子。
同样,我不会在一行中执行所有操作,但我会将其拆分为多个步骤以强调可读性。
像这样:
DATA = {'key1': 'value1', 'key2': 'value2'}
print "\n".join(sorted(["%s = %s" % (k,v) for (k,v) in DATA.iteritems()]))
我更喜欢pythonic方式:
mydict = {'a':1, 'b':2, 'c':3}
for (key, value) in mydict.items():
print key, '=', value