我有一个名为 stockdata 的 postgreSQL 表,其中包含大约 250 家公司的财务报表信息,具有以下设置:
Company q4_2022_revenue q3_2022_revenue
CPI Card 126436000 124577000
Zuora 103041000 101072000
…
我使用 Python 中的 psycopg2 包将这些数据导入到“main.py”文件中,代码如下:
import psycopg2
conn=psycopg2.connect(‘dbname=postgres user=postgres password=‘…’)
cur=conn.cursor()
cur.execute(‘SELECT company, (q4_2022_revenue-q3_2022_revenue)/CAST(q3_2022_revenue AS float) AS revenue_growth FROM stockdata ORDER BY revenue_growth DESC LIMIT 25;
records=cur.fetchall()
print(records)
这给了我以下结果:
[(‘Alico’, 9.269641125121241),(‘Arrowhead Pharmaceuticals’, 1.7705869324473975),…],
其中 records[0] 等于 ('Alico', 9.269641125121241) 并且记录的类型作为一个整体给出为列表。
我正在尝试弄清楚如何将变量分别分配给公司名称和收入变化,以便我可以将收入变化从 9.2696 修改为 926.96%(公司处于季节性行业 - 农业- 并且正在从飓风中恢复,因此数据有意义)。收入变化将乘以 100,并在末尾给出一个 % 符号,并四舍五入为 2 位小数。
我尝试添加行:
list((x,y) for x,y in records)
打算将 x 作为公司名称的键值,将 y 作为收入变化的对值,但在调用记录 [x] 时收到“名称‘x’未定义”错误。
如何将我的 psycopg2 元组列表转换为可变字典并将结果分配给键值对,以便我可以修改值的格式?
编辑:926.96% 中的错别字。
在psycopg2.extras中有RealDictCursor,它可以将查询结果输出为字典。
改变你的光标使用它如下:
conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor)
要将查询结果分配给以公司名称为键、收入增长为值的字典,您可以遍历列表中的元组并将它们添加到字典中,如下所示:
for record in records:
company = record[0]
revenue_growth = record[1]
result_dict[company] = revenue_growth
这将创建一个字典,其中每个键都是一个公司名称,对应的值是收入增长。然后,您可以使用如下字符串格式修改收入增长值的格式:
for company, revenue_growth in result_dict.items():
formatted_revenue_growth = '{:.2f}%'.format(revenue_growth * 100)
result_dict[company] = formatted_revenue_growth
这将循环遍历字典,并将原始收入增长值替换为带小数点后两位显示百分比变化的格式化字符串。
请注意,字典本质上是可变的,因此您可以直接修改值而无需转换为可变数据类型。但是,如果您更喜欢使用可变数据类型,则可以使用字典理解将元组列表转换为字典,如下所示:
result_dict = {record[0]: record[1] for record in records}
这将创建一个字典,其中每个键都是一个公司名称,对应的值是收入增长。然后,您可以如上所述修改这些值。