使用list comprehension在python中连接字典中的项目

时间:2009-12-15 22:49:10

标签: python list-comprehension

编辑:稍微澄清了一下这个问题

如何从字典中获取格式为

的字符串
key1 = value1
key2 = value2

以相对较快的方式? (相对于简单连接)

5 个答案:

答案 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