使用列表推导在Python中连接字典中的项

4 投票
5 回答
13354 浏览
提问于 2025-04-15 17:04

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

我想知道怎么从一个字典里快速获取一个特定格式的字符串

key1 = value1
key2 = value2

而且这个方法要比简单的拼接要快一些。

5 个回答

3

明确比隐含更好

列表推导是一种创建列表的方法,并不是为了避免使用循环。
根据PEP 202的说法:

列表推导提供了一种更简洁的方式来创建列表,适用于当前需要使用map()、filter()或嵌套循环的情况。

所以你应该问问自己:
在Python中创建这段代码有什么用呢?虽然它可能更紧凑,但代码被阅读的次数远远超过写的次数,那这样有什么好处呢?

Tor Valamo的解决方案,虽然不是最初请求中所问的内容,但在我看来更容易阅读,因此应该更受欢迎

在问题更新后的编辑
str.join是从列表快速连接字符串的好方法,Nadia和Ritchie的回复是如何使用它的好例子。
再说一次,我会把所有内容都写在一行里,而是会分成几个步骤,以强调可读性。

10
print '\n'.join('%s = %s' % (key, value) for key, value in d.iteritems())

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

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在另一个回答中的评论而更新:

如果你是把它传给一个函数,而不是在这里打印出来,那么你应该直接把生成器传给那个函数,或者把字典本身传过去,让函数自己处理它需要做的事情。

这样做比在一个不需要的地方把它转换成字符串要好得多。函数应该负责这个,因为它才是使用这个数据的地方。

我写了一个包装函数,因为修改主函数是不可能的。

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

log_wrap(mydict)

撰写回答