dict 的内容,如何做简便的 print 输出格式化内容?

2018-08-28 15:52:07 +08:00
 pppguest3962

代码贴过来会严重变形,简化了内容,伪代码式表达问题。。。, 例子:

例子:
makeData = {'D2_make_time':'32',
			'D4_make_seq':'32',
			'D16_make_zaijianum':'32',
			'D2_make_time':'32',
			'D9_make_carteam':'韵达',
			'D11_make_goodteam':'A16'}

一般输出:

                print(('|生产日:' + makeData['D2_make_time'].strip()),
                       '|产 次:' + makeData['D4_make_seq'].strip(),
                       '|在架数:' + makeData['D16_make_zaijianum'].strip(),
                       '|车  队:' + makeData['D9_make_carteam'].strip(),
                       '|货  队:' + makeData['D11_make_goodteam'].strip())

会这样:

|生产日:32 |产 次:32 |在架数:32 |车  队:SASNCKJP |货  队:ECMCDJEH
|生产日:32 |产 次:32 |在架数:32 |车  队:NAAKSE |货  队:ZKFGKFRTYKJJ
|生产日:32 |产 次:32 |在架数:32 |车  队:XXMEWQOOPKMU |货  队:IRTYNVSSMY
|生产日:32 |产 次:32 |在架数:32 |车  队:VBSKTHJNMM |货  队:DNFG
|生产日:32 |产 次:32 |在架数:32 |车  队:AERKJUI |货  队:QMSCGNYR

我想输出的比较规范一些,如果能长成这个样子就好了。。。

|生产日:32 |产 次:32 |在架数:32 |车  队:SASNCKJP       |货  队:ECMCDJEH
|生产日:32 |产 次:32 |在架数:32 |车  队:NAAKSE         |货  队:ZKFGKFRTYKJJ
|生产日:32 |产 次:32 |在架数:32 |车  队:XXMEWQOOPKMU   |货  队:IRTYNVSSMY
|生产日:32 |产 次:32 |在架数:32 |车  队:VBSKTHJNMM     |货  队:DNFG
|生产日:32 |产 次:32 |在架数:32 |车  队:AERKJUI        |货  队:QMSCGNYR

我试过:

                a = makeData['D2_make_time'].strip()                
                print(('|生产日:' + {}).format(a),
                       '|产 次:' + makeData['D4_make_seq'].strip(),
                       '|在架数:' + makeData['D16_make_rangqiu'].strip(),
                       '|车  队:' + makeData['D9_make_hometeam'].strip(),
                       '|货  队:' + makeData['D11_make_visiteam'].strip())

pccharm 会提示 format()只接受 str 类型,而不接受 dict 类型,那么也没必要再试%s 的 print 方法了吧?

2471 次点击
所在节点    Python
15 条回复
chenqh
2018-08-28 15:59:14 +08:00
fill?
cloudbeyond
2018-08-28 16:16:08 +08:00
pprint?
zhusimaji
2018-08-28 16:17:30 +08:00
pprint 了解下
746970179
2018-08-28 16:23:11 +08:00
对于字符串, 可以使用 ljust 方法, 这个方法进行左对齐, 同时用空格补齐剩下的空位
比如'abc'.ljust(5), 得到的就是 'abc ' , 后面有 2 个空格

还有你的代码格式, 可以这样
makeData = {
'D2_make_time':'32',
'D4_make_seq':'32',
'D16_make_zaijianum':'32',
'D2_make_time':'32',
}

当一行写不完的时候, 左括号后面不要写代码, 直接换行
优点的话, 主要是方便. 因为直接写代码, 下面几行的缩进, 不一定是 4 个空格的整倍数了
还有一点就是如果注释某一行数据, 如果是第一行数据注释, 会比较麻烦
使用这种换行, 会更整齐
你 print 的括号里, 也可以这样
print(
'|生产日:' + makeData['D2_make_time'].strip(),
'|生产日:' + makeData['D2_make_time'].strip(),
'|生产日:' + makeData['D2_make_time'].strip(),
)
大概这样
whoami9894
2018-08-28 16:25:35 +08:00
好好看看文档 format 怎么用
Yourshell
2018-08-28 16:27:58 +08:00
format 解包 dict 就行了,或者直接实现__str__
jswh
2018-08-28 16:47:14 +08:00
tab 字符不就是干这事的嘛
huangzhe8263
2018-08-28 17:03:51 +08:00
pprint +1

另外建议改为 dict constructor, 更直观, 并且 IDE 友好

makeData = dict(
D2_make_time='32',
D4_make_seq='32',
D16_make_zaijianum='32',
D2_make_time='32',
D9_make_carteam='韵达',
D11_make_goodteam='A16'
)

另外你 dict 的 keyword 重复了
lieh222
2018-08-28 17:11:41 +08:00
占位符啊
output_template = '|生产日:%-5s|产 次:%-5s|在架数:%-5s|车 队:%-5s|货 队:%-5s'
%-5s,长度小于 5 的自动向右补全空格
iridescent0rsy
2018-08-28 17:20:53 +08:00
PrettyTable

```
import prettytable as pt

## 按行添加数据
tb = pt.PrettyTable()
tb.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
tb.add_row(["Adelaide",1295, 1158259, 600.5])
tb.add_row(["Brisbane",5905, 1857594, 1146.4])
tb.add_row(["Darwin", 112, 120900, 1714.7])
tb.add_row(["Hobart", 1357, 205556,619.5])

print(tb)
```
```
+-----------+------+------------+-----------------+
| City name | Area | Population | Annual Rainfall |
+-----------+------+------------+-----------------+
| Adelaide | 1295 | 1158259 | 600.5 |
| Brisbane | 5905 | 1857594 | 1146.4 |
| Darwin | 112 | 120900 | 1714.7 |
| Hobart | 1357 | 205556 | 619.5 |
+-----------+------+------------+-----------------+
```
zhusimaji
2018-08-28 17:50:01 +08:00
@iridescent0rsy 感觉这个跟 pandas 差不多了,楼主可以考虑 pd.DateFrame.from_dict 然后打印
reself
2018-08-28 20:30:32 +08:00
@lieh222 维护性奇差无比
TripleZ
2018-08-28 20:42:35 +08:00
用 `.format()` 或者是 `f""` 来格式化输出吧……
用库的话`prettytable` 和 `pandas` 看起来都不错。
hjq98765
2018-08-29 16:15:36 +08:00
@jswh tab 还真不行,如果字符串之间的长度差超过了 1 个\t 的长度,就会彻底乱掉

str.ljust 和 rjust 才是王道,谁用谁知道!
jswh
2018-08-29 16:26:35 +08:00
@hjq98765 受教了, 没考虑超出的情况

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/483984

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX