2009-12-15 65 views

回答

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评论编辑:

如果你传递到一个函数,而不是在这里打印它,那么你应该只传递生成器到函数或字典本身,让函数处理它需要做的任何事情h it。

这比将它转换为不需要的范围内的字符串要好得多。该功能应该这样做,因为这就是它的用处。

我做了一个包装函数,因为编辑主函数是不成问题的。

def log_wrap(mydict): 
    mystr = '\n'.join(['%s = %s' % (k,v) for k,v in mydict.iteritems()]) 
    write_to_log(mydict) 

log_wrap(mydict) 
+0

我看不出有任何的命名空间在这里。你的意思是“范围”? – 2009-12-15 23:35:02

+0

我传递给它的函数来自我无法更改的日志记录模块。 – randomThought 2009-12-15 23:45:22

+0

@Pavel - 是的,我做到了。 :P @Jaelebi - 那么你几次将相同的字符串传递给同一个日志记录函数?为什么? – 2009-12-15 23:48:15

2

像这样:

DATA = {'key1': 'value1', 'key2': 'value2'} 
print "\n".join(sorted(["%s = %s" % (k,v) for (k,v) in DATA.iteritems()])) 
8
print '\n'.join('%s = %s' % (key, value) for key, value in d.iteritems()) 
3

明确优于隐式

列表理解是一个way to create list,而不是为了避免环路。
从PEP 202:

列表解析提供了更简洁 方式 情况来创建列表,其中图()和过滤器() 和/或嵌套的循环将被当前 使用。

所以你应该问自己:
什么时候在Python中创建这个代码有用?它可能更紧凑,但代码被读取的次数比写入次数多,所以它的优点是什么?

Tor Valamo的解决方案虽然没有在原始请求中提出要求,但在我看来,它更具可读性,因此因此应该是首选。问题更新
str.join

编辑是实现从列表中快速拼接的好办法 - 和回复来自纳迪亚和Ritchie是如何使用它的好例子。
再次,我会而不是在一行中执行所有的事情,但我会分裂它在各个步骤,以强调可读性。

+0

我稍微编辑后就取消了我的回答。起初我把它作为一个tupled列表,所以这是错误的。 – 2009-12-15 23:05:27

+0

我想要这个方法,因为我想将完整的字符串传递给一个函数。在直接循环的情况下,我不得不连接它或使用stringIO函数。我需要这么做很多次 – randomThought 2009-12-15 23:18:54

+0

你的问题是“我怎样才能打印出格式化的字典......”这就是我们所回答的。如果你需要它来做其他事情,那么你应该解释这种情况,因为也可能有其他优化。 – 2009-12-15 23:25:28

0

我更喜欢Python的方式:

mydict = {'a':1, 'b':2, 'c':3} 
for (key, value) in mydict.items(): 
    print key, '=', value 
+1

mydict.iteritems()对于巨大的字典会更好 – 2009-12-16 10:52:14