编辑:稍微澄清了一下这个问题
如何从字典中获取格式为
的字符串key1 = value1
key2 = value2
以相对较快的方式? (相对于简单连接)
答案 0 :(得分:10)
这里没有理由使用列表理解。
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)
答案 1 :(得分:9)
print '\n'.join('%s = %s' % (key, value) for key, value in d.iteritems())
答案 2 :(得分:3)
明确优于隐式
列表理解是way to create list,不是为了避免循环 从PEP 202:
列表理解提供了更多 简明的方法来创建列表 map()和filter()的情况 和/或嵌套循环当前是 使用
所以你应该问自己:
何时在Python中创建此代码很有用?它可能更紧凑,但代码的读取次数比写入次数多得多,所以它的优点是什么?
Tor Valamo的解决方案虽然不是原始请求中的要求,但在我看来更具可读性,因此应该是首选。
问题更新后编辑
str.join
是从列表中实现快速连接的好方法 - 来自Nadia和Ritchie的回复是如何使用它的很好的例子。
同样,我会不在一行中执行所有操作,但我会在不同的步骤中将其拆分以强调可读性。
答案 3 :(得分:2)
像这样:
DATA = {'key1': 'value1', 'key2': 'value2'}
print "\n".join(sorted(["%s = %s" % (k,v) for (k,v) in DATA.iteritems()]))
答案 4 :(得分:0)
我更喜欢pythonic方式:
mydict = {'a':1, 'b':2, 'c':3}
for (key, value) in mydict.items():
print key, '=', value