【问题标题】:how to do math in dict values are lists in python?如何在 dict 值中进行数学运算是 python 中的列表?
【发布时间】:2021-08-12 14:13:40
【问题描述】:

我有一个问题,我想添加一些数学并为字典列表添加值。

distance_travelled_by_each_node = {0: [0.0, 17.751, 594.24, 1394.3, 2042.442, 2086.694], 1: [0.0, 
              1870.058, 2299.614, 3584.593, 3838.359, 4638.419, 5286.561, 5368.107, 5792.431, 
              6285.873, 6500.971, 6524.217, 13880.759000000002, 14049.589000000002], 2: [0.0, 
              648.142, 729.6880000000001, 1154.0120000000002, 1647.4540000000002, 
              1862.5520000000001, 1885.7980000000002, 9242.340000000002, 9411.170000000002]}

代码

arrival_time_at_each_node = {}
for i in range(len(distance_travelled_by_each_node)):
    for j in  range(len(distance_travelled_by_each_node[i])):
        arrival_time_at_each_node[i].append(distance_travelled_by_each_node[i][j]/20)

密钥错误:0

我预期的输出:

arrival_time_at_each_node = {0:[0.0, 0.8875500000000001, 29.712, 69.715, 102.1221, 
      104.3347],1:[ 0.0, 93.5029, 114.9807, 179.22965, 191.91795, 231.92095, 
       264.32804999999996,268.40535, 289.62154999999996, 314.29364999999996, 325.04855, 
       326.21085, 694.0379500000001,702.47945],2:[ 0.0, 32.4071, 36.48440000000001, 
       57.70060000000001, 82.37270000000001, 93.1276,  94.28990000000002, 462.1170000000001, 
       470.5585000000001]}

【问题讨论】:

  • 您没有“字典列表”。您有一个字典,其项目值是列表。

标签: python python-3.x list dictionary


【解决方案1】:

您使用的是字典而不是列表!您可以先获取不同的键,然后再获取值。也不要忘记在新字典中启动列表。

应该这样做:

arrival_time_at_each_node = {}
for key in distance_travelled_by_each_node.keys():
    arrival_time_at_each_node[key] = []
    for j, value in  enumerate(distance_travelled_by_each_node[key]):
        arrival_time_at_each_node[key].append(value/20)

【讨论】:

    【解决方案2】:

    使用字典理解:

    arrival_time_at_each_node = {k: [x/20 for x in v] for k,v in distance_travelled_by_each_node.items()}
    

    【讨论】:

      【解决方案3】:

      还有另一种可能性,使用defaultdict 而不是普通的dict

      from collections import defaultdict
      arrival_time_at_each_node = defaultdict(list)
      

      【讨论】:

        【解决方案4】:

        因为这条线,你会得到一个KeyError

        arrival_time_at_each_node[i].append(distance_travelled_by_each_node[i][j]/20)
        

        因为当您尝试附加到其值时,arrival_time_at_each_node 中没有键 0

        不过你可以试试这个方法。

        distance_travelled_by_each_node = {0: [0.0, 17.751, 594.24, 1394.3, 2042.442, 2086.694], 1: [0.0, 
                      1870.058, 2299.614, 3584.593, 3838.359, 4638.419, 5286.561, 5368.107, 5792.431, 
                      6285.873, 6500.971, 6524.217, 13880.759000000002, 14049.589000000002], 2: [0.0, 
                      648.142, 729.6880000000001, 1154.0120000000002, 1647.4540000000002, 
                      1862.5520000000001, 1885.7980000000002, 9242.340000000002, 9411.170000000002]}
        
        arrival_time_at_each_node = {}
        
        for i,v in distance_travelled_by_each_node.items():
            arrival_time_at_each_node[i] = [x/20 for x in v]
            
        print(arrival_time_at_each_node)
        
        {0: [0.0, 0.8875500000000001, 29.712, 69.715, 102.1221, 104.3347], 1: [0.0, 93.5029, 114.9807, 179.22965, 191.91795, 231.92095, 264.32804999999996, 268.40535, 289.62154999999996, 314.29364999999996, 325.04855, 326.21085, 694.0379500000001, 702.47945], 2: [0.0, 32.4071, 36.48440000000001, 57.70060000000001, 82.37270000000001, 93.1276, 94.28990000000002, 462.1170000000001, 470.5585000000001]}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-07
          • 1970-01-01
          • 2023-01-10
          • 1970-01-01
          • 1970-01-01
          • 2016-01-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多