【问题标题】:Iterate over dictionary using list of list使用列表列表迭代字典
【发布时间】:2020-07-07 09:08:17
【问题描述】:

您好,我有列表样本和字典的列表

sample=[[0,0,1440,1440],[3,23040,1440,24480]]

machine_to_intervals[0].append(model.NewIntervalVar(0,0 ,0 , 'week'))

想要的输出是

machine_to_intervals[0].append(model.NewIntervalVar(0,1440 ,1440 , 'week'))
machine_to_intervals[3].append(model.NewIntervalVar(23040,1440 ,24880 , 'week'))

我尝试了以下方法

sample=[[0,0,1440,1440],[3,23040,1440,24480]]
machine_to_intervals={}

for list in sample:
    machine_to_intervals[sample[0]].append(model.NewIntervalVar(sample[1], sample[2], sample[3],'week'))

但低于错误

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-7588d30dcdef> in <module>
      3 
      4 for list in sample:
----> 5     machine_to_intervals[sample[0]].append(model.NewIntervalVar(sample[1], sample[2], sample[3], 'week'))
      6 
TypeError: unhashable type: 'list'

【问题讨论】:

    标签: python list loops dictionary


    【解决方案1】:

    您的sample 列表是二维的,因此您需要在两个维度上进行迭代/索引。您似乎在尝试的过程中走上了正确的轨道,但您应该索引list(来自for list in sample 声明)。

    将 for 循环中的 sample 引用替换为 list,它应该可以工作。

    另外,仅供参考,将变量命名为 python 对象类型(例如list)并不是一个好习惯。最好将其重命名为不同的名称,例如:

    for data in sample:
        machine_to_intervals[data[0]].append(model.NewIntervalVar(data[1], data[2], data[3],'week'))
    

    【讨论】:

      【解决方案2】:

      sample 是一个列表列表,您想创建一个字典machine_to_intervals,其中条目由sample 的内部列表给出,键是第一个元素,值是由其他三个元素构成的。所以你可以这样做:

      machine_to_intervals = { x[0]: model.NewIntervalVar(x[1], x[2], x[3], 'week') for x in sample }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-01
        • 1970-01-01
        相关资源
        最近更新 更多