4

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

如何从字典中获取格式为的字符串

key1 = value1
key2 = value2

以相对快速的方式?(相对于普通串联)

4

5 回答 5

10
print '\n'.join('%s = %s' % (key, value) for key, value in d.iteritems())
于 2009-12-15T22:51:32.923 回答
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)
于 2009-12-15T22:51:40.677 回答
3

显式优于隐式

列表理解是一种创建列表的方法,而不是避免循环。
来自 PEP 202:

列表推导式提供了一种更简洁的方法来在当前使用 map() 和 filter() 和/或嵌套循环的情况下创建列表。

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

Tor Valamo 的解决方案虽然不是原始请求中所要求的,但在我看来更具可读性,因此应该是首选的。

问题更新后编辑
str.join是从列表中实现快速连接的好方法 - Nadia 和 Ritchie 的回复是如何使用它的好例子。
同样,我不会在一行中执行所有操作,但我会将其拆分为多个步骤以强调可读性。

于 2009-12-15T23:01:42.853 回答
2

像这样:

DATA = {'key1': 'value1', 'key2': 'value2'}
print "\n".join(sorted(["%s = %s" % (k,v) for (k,v) in DATA.iteritems()]))
于 2009-12-15T22:50:58.930 回答
0

我更喜欢pythonic方式:

mydict = {'a':1, 'b':2, 'c':3}
for (key, value) in mydict.items():
    print key, '=', value
于 2009-12-15T23:21:10.943 回答