如何将多个生成器表达式作为 Python 的 join
方法的输入?我尝试了以下不起作用的方法。使用 Python 2.x 和 3.x 时有区别吗?我的确切版本是 Python 2.7.12。
def productList(self, obj):
return ", ".join([w.name for w in obj.someProducts.all()],[w.code
for w in obj.someProducts.all()])
没有[]
def productList(self, obj):
return ", ".join(w.name for w in obj.someProducts.all(),w.code
for w in obj.someProducts.all())
输入:
Product table
Name: Char;
Code: Char;
输出:
name1code1, name2code2
最佳答案
如果要显示名称和代码,只需将它们组合起来即可,不需要两个生成器。
', '.join(w.name + ':' + w.code for w in obj.someProducts.all())
或者字符串格式化:
', '.join('{name}: {code}'.format(name=w.name, code=w.code) for w in obj.someProducts.all())
或者另一个连接(不推荐,除非你可以给它一个生成器 - 创建另一个列表是一种浪费,但这演示了如何嵌套连接)
', '.join(':'.join([w.name, w.code]) for w in obj.someProducts.all())
附带说明一下,Python 3.6 引入了 Literal String Interpolation ,这意味着你应该能够做这样的事情(我会在家里测试这个,因为我没有 3.6 在工作;有人可以验证这是否真的有效。如果没有,请告诉我,我会删除它):
', '.join(f'{w.name}: {w.code}' for w in obj.someProducts.all())
关于python - 如何将生成器表达式作为 Python 的 join 方法的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38730265/