我有一个包含产品信息的词典列表。 我想打印列中的每个值以及超出列长度的textwrap值。
这是我到目前为止所看到的,似乎str.format()在包装字符串时不会添加空格填充。我如何将它们放在列中?
列表:
JSONObject jsonObject = new JSONObject(jsonString);
JSONArray jsonArray = jsonObject.getJSONArray("valueSet");
for(int i=0; i<jsonArray.length(); i++) {
System.out.println(jsonArray.optJSONObject(i).get("value").toString());
}
代码:
product_list = [{'num': 1, 'brands': 'Auchan', 'product_name': 'Pain de mie complet spécial sandwich', 'id': 213, 'cat_id': 3, 'nutrition_grade_fr': 'A'}, {'num': 2, 'brands': 'Bjorg', 'product_name': 'Pain complet 3 céréales', 'id': 211, 'cat_id': 3, 'nutrition_grade_fr': 'A'}, {'num': 3, 'brands': 'Brioche Pasquier', 'product_name': 'Biscotte au son, La Biscotte Blé Complet', 'id': 243, 'cat_id': 3, 'nutrition_grade_fr': 'A'}, {'num': 4, 'brands': 'Brioche Pasquier,Pasquier', 'product_name': 'La Biscotte Equilibre (36 biscottes)', 'id': 226, 'cat_id': 3, 'nutrition_grade_fr': 'A'}, {'num': 5, 'brands': 'Carrefour', 'product_name': 'Pain azyme', 'id': 299, 'cat_id': 3, 'nutrition_grade_fr': 'A'}, {'num': 6, 'brands': 'Carrefour', 'product_name': 'Spécial sandwich Complet 088€', 'id': 287, 'cat_id': 3, 'nutrition_grade_fr': 'A'}, {'num': 7, 'brands': 'Carrefour discount', 'product_name': 'Pain de mie Sandwich complet', 'id': 262, 'cat_id': 3, 'nutrition_grade_fr': 'A'}, {'num': 8, 'brands': 'Céréal Bio', 'product_name': 'Tartines croquantes multicéréales - riz, sarrasin & quinoa', 'id': 258, 'cat_id': 3, 'nutrition_grade_fr': 'A'}]
结果:
for item in product_list:
menu = '{} - {}'.format(item['brands'], item['product_name'])
menu = textwrap.fill(menu, width=60)
print('{:>2}. {:<60} Score : {}'.format(
item['num'], menu, item['nutrition_grade_fr']))
我想要的是什么:
1. Bio Village,Marque Repère - 36 biscottes au germe de blé Score : A
2. Bjorg - Pain complet 3 céréales Score : A
3. Brioche Pasquier - Biscotte au son, La Biscotte Blé Complet Score : A
4. Brioche Pasquier,Pasquier - La Biscotte Equilibre (36
biscottes) Score : A
5. Carrefour - Pain azyme Score : A
6. Carrefour - Spécial sandwich Complet 088€ Score : A
7. Carrefour discount - Pain de mie Sandwich complet Score : A
8. Céréal Bio - Tartines croquantes multicéréales - riz,
sarrasin & quinoa Score : A
解决了:
1. Bio Village,Marque Repère - 36 biscottes au germe de blé Score : A
2. Bjorg - Pain complet 3 céréales Score : A
3. Brioche Pasquier - Biscotte au son, La Biscotte Blé Complet Score : A
4. Brioche Pasquier,Pasquier - La Biscotte Equilibre (36
biscottes) Score : A
5. Carrefour - Pain azyme Score : A
6. Carrefour - Spécial sandwich Complet 088€ Score : A
7. Carrefour discount - Pain de mie Sandwich complet Score : A
8. Céréal Bio - Tartines croquantes multicéréales - riz,
sarrasin & quinoa Score : A
谢谢ukemi,你给了我一个开始的想法。 有没有人有更简单的方法?
答案 0 :(得分:0)
您可以通过更改subsequent_indent
参数来修复后续行中的缩进:
...
menu = textwrap.fill(menu, width=60, subsequent_indent=" ") #4 spaces, length of " x. "
...
1. Auchan - Pain de mie complet spécial sandwich Score : A
2. Bjorg - Pain complet 3 céréales Score : A
3. Brioche Pasquier - Biscotte au son, La Biscotte Blé Complet Score : A
4. Brioche Pasquier,Pasquier - La Biscotte Equilibre (36
biscottes) Score : A
5. Carrefour - Pain azyme Score : A
6. Carrefour - Spécial sandwich Complet 088€ Score : A
7. Carrefour discount - Pain de mie Sandwich complet Score : A
8. Céréal Bio - Tartines croquantes multicéréales - riz,
sarrasin & quinoa Score : A
您可能需要使用稍微复杂一些的逻辑来修复后续行的正确对齐方式,其中包括以下内容:
line_length = 60
for item in product_list:
menu = '{} - {}'.format(item['brands'], item['product_name'])
menu = textwrap.fill(menu, width=line_length, subsequent_indent=" ")
curr_length = len(menu)
if curr_length > line_length:
space = 2*line_length - curr_length #Computes space needed for overflowing lines
else:
space = 0
print('{:>2}. {:<60}{} Score : {}'.format(item['num'], menu, " "*space, item['nutrition_grade_fr']))
1. Auchan - Pain de mie complet spécial sandwich Score : A
2. Bjorg - Pain complet 3 céréales Score : A
3. Brioche Pasquier - Biscotte au son, La Biscotte Blé Complet Score : A
4. Brioche Pasquier,Pasquier - La Biscotte Equilibre (36
biscottes) Score : A
5. Carrefour - Pain azyme Score : A
6. Carrefour - Spécial sandwich Complet 088€ Score : A
7. Carrefour discount - Pain de mie Sandwich complet Score : A
8. Céréal Bio - Tartines croquantes multicéréales - riz,
sarrasin & quinoa Score : A
注意:不是实际输出,运行您的原始代码我无法复制您的结果 - 这些行未正确对齐。每个'得分'位是左侧或右侧的一个或两个空格。