Python 如何删除“;十进制;从查询结果中

Python 如何删除“;十进制;从查询结果中,python,python-3.x,Python,Python 3.x,我使用以下代码获得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

我使用以下代码获得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')]

这些数字以Python“十进制”格式存储(请参阅:)

您可以通过映射数据类型将其转换为普通字符串,一些示例代码可以实现这一点:

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_固定为:

[['2016-01-01', '11.0909090909090909', '3.7272727272727273', '58.5354545455'],
 ['2016-02-01', '11.6666666666666667', '4.0000000000000000', '74.8766666667']]
请尝试以下操作:

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)]
>>> 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')]
使用以下方法获取字符串值,并避免由于
浮点
精度而导致的更改:

>>> res
[('2016-01-01', 11.090909090909092, 3.7272727272727275, 58.5354545454545), ('2016-02-01', 11.666666666666666, 4.0, 74.8766666666667)]
>>> 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')]
使用


能否显示执行该查询的Python代码?在本例中,
Decimal
来自何处?“Decimal”字符串-它不像stringExample将double转换为bigInt(Postgresql):Postgresql的舍入函数的完整列表:Qichao Zhao它给我的结果是这样的:[,]啊,我相信这是因为在python3+中,map函数返回一个迭代器而不是一个列表,请尝试如下编辑这一行:var_fixed.append(list(map(str,list(row)))很乐意帮忙。就我个人而言,虽然我认为sparkandshine下面的列表理解回答更优雅一点,但我会在将来推荐这种方法!:)非常感谢你你在
str
中使用这个案例?使用
float
会稍微改变数字的精度。