我使用以下代码从PostgreSQL查询得到结果:
cur = con.cursor()
cur.execute("""SELECT to_char(tt.service_date,'yyyy-mm-01') AS txn_month,
SUM (tt.customer) AS customer,SUM (tt.tour) AS tour,
SUM (tt.distancetraveled) AS distancetraveled
FROM
tbl_travel as tt
GROUP BY
txn_month""")
rows = cur.fetchall()
我的查询结果是这样的:
[('2016-01-01', Decimal('11.0909090909090909'), Decimal('3.7272727272727273'), 58.5354545454545),
('2016-02-01', Decimal('11.6666666666666667'), Decimal('4.0000000000000000'), 74.8766666666667)]
我需要删除" Decimal"字符串在值前面,得到如下结果:
[('2016-01-01', '11.0909090909090909', '3.7272727272727273','58.5354545454545'),
('2016-02-01', '11.6666666666666667', '4.0000000000000000','74.8766666666667')]
答案 0 :(得分:2)
这些数字存储为Python" Decimal"格式(见:https://docs.python.org/3.4/library/decimal.html)
您可以通过映射数据类型将它们转换为普通字符串,一些示例代码可以执行此操作:
from decimal import Decimal
var = [('2016-01-01', Decimal('11.0909090909090909'), Decimal('3.7272727272727273'),
58.5354545454545),
('2016-02-01', Decimal('11.6666666666666667'), Decimal('4.0000000000000000'),
74.8766666666667)]
var_fixed = []
for row in var:
var_fixed.append(list(map(str, list(row))))
这使得var_fixed为:
[['2016-01-01', '11.0909090909090909', '3.7272727272727273', '58.5354545455'],
['2016-02-01', '11.6666666666666667', '4.0000000000000000', '74.8766666667']]
答案 1 :(得分:2)
from decimal import Decimal
lists = [('2016-01-01', Decimal('11.0909090909090909'), Decimal('3.7272727272727273'), 58.5354545454545),
('2016-02-01', Decimal('11.6666666666666667'), Decimal('4.0000000000000000'), 74.8766666666667)]
results = [tuple(str(item) for item in t) for t in lists]
print(results)
[('2016-01-01', '11.0909090909090909', '3.7272727272727273', '58.5354545455'),
('2016-02-01', '11.6666666666666667', '4.0000000000000000', '74.8766666667')]
答案 2 :(得分:1)
尝试以下方法:
res = [(item[0], float(item[1]), float(item[2]), item[3]) for item in my_list]
<强>输出:强>
>>> res
[('2016-01-01', 11.090909090909092, 3.7272727272727275, 58.5354545454545), ('2016-02-01', 11.666666666666666, 4.0, 74.8766666666667)]
使用以下内容获取字符串值并避免因float
精度导致的更改:
>>> res = [(item[0], str(item[1]), str(item[2]), str(item[3])) for item in my_list]
>>> res
[('2016-01-01', '11.0909090909090909', '3.7272727272727273', '58.5354545455'), ('2016-02-01', '11.6666666666666667', '4.0000000000000000', '74.8766666667')]