使用列表推导在Python中连接字典中的项
编辑:稍微澄清了一下问题
我想知道怎么从一个字典里快速获取一个特定格式的字符串
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)