【问题标题】:for loop in mysql id dictionary with values带有值的mysql id字典中的for循环
【发布时间】:2019-03-22 10:27:49
【问题描述】:

我的目标是得出平均分

我正在使用 for 循环在 python 中执行 mysql 查询。此查询返回以下 id 以及一些值:

    {'speed_range_id': 0, 'count(speed_range_id)': 511}
{'speed_range_id': 1, 'count(speed_range_id)': 1827}
{'speed_range_id': 2, 'count(speed_range_id)': 48}
{'speed_range_id': 4, 'count(speed_range_id)': 100}
{'speed_range_id': 8, 'count(speed_range_id)': 60}

我想做的是创建一个字典,将 id 映射到一个值,比如speed_range_id:1 = 15km/hr, speed_range_id:2 = 25 km, speed_range_id:4 = 50 km/hr 等等。

然后我想将count(speed_range_id)': 1827 乘以我给 id 的值,在这种情况下,1827*15 对每个其他 id 以此类推。然后我必须将每个 ID 的结果相加,然后除以计数的总和 1827+48+100+60=2035 以得出平均公里/小时

我一直在尝试为 speed_range_id 创建值字典并将它们存储在一个变量中。我认为我需要做一些 if 语句?

感谢任何帮助或指导。 我的 for 循环目前看起来像这样:

for rowdict in result:
    cursor2.execute(speed_query, rowdict)
    speed_result = cursor2.fetchall()
    for rowdict2 in speed_result:
        print(rowdict2)

【问题讨论】:

  • 那么,如何将值映射到 speed_range_id
  • @swhat 我会声明它们。对于这个例子,我会做 1 = 0、2 = 25、9 = 50、10 = 75、11 = 100、12 = 150 和 13 = 15。我想因为 1 等于我必须排除那个 id跨度>
  • 所以你会有另一个字典,来自你的例子{1:15, 2:25, 4:50}?

标签: python mysql loops for-loop


【解决方案1】:

声明一个字典 id_vals 来存储 id 和值的关联,以及 speed_result 就像你已经在你的循环中一样。您可以使用 sum 和生成器表达式来计算 speed_result 中每个元素的总和。

id_vals = {1:15, 2:25, 4:50...}
result_sum = sum(id_vals[row['speed_range_id']]*row['count(speed_range_id)'] for row in speed_result)
count_sum = sum(row['count(speed_range_id)'] for row in speed_result)
avg = result_sum/count_sum

【讨论】:

  • 字典方法是我正在寻找的,但是,当我运行 result_sum = sum(row['speed_range_id']*row['count(speed_range_id)'] for row in speed_result) 行时,[speed_range_id] 行仍然乘以 if 而不是乘以分配的值。
猜你喜欢
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
相关资源
最近更新 更多