【发布时间】:2017-12-14 05:12:59
【问题描述】:
我正在做一个优化项目,我有一系列以元组作为键的字典和另一个字典(Gurobi 的决策变量),其中键是其他字典中元组的第一个元素。我需要能够做到以下几点:
data1 = {(place, person): q}
data2 = {person: s}
x = {place: var}
qx = {k: x[k]*data1[k] for k in x}
total1 = {}
for key, value in qx.items():
person = key[1]
if person in total1:
total1[person] = total1[person] + value
else:
total1[person] = value
total2 = {k: total1[k]/data2[k] for k in total1}
(请注意,data1、data2 和 x 字典非常大,有 10,000 多个不同的地点/人对)。
当我使用原始数据代替使用相同 (place, person) 键的决策变量时,同样的过程会起作用。不幸的是,我在 Gurobi 模型中的变量本身必须是一个字典,并且不能包含 person 键值。
有没有办法只遍历元组键中的第一个值?
编辑: 以下是一些示例值(敏感数据,因此占位符值):
data1 = {(1, a): 28, (1, c): 57, (2, b): 125}
data2 = {a: 7.8, b: 8.5, c: 8.4}
x = {1: 0.002, 2: 0.013}
data1 中的值都是整数,data2 是小时,x 是小数。
total2 的输出应类似于以下内容(假设每个人还有许多其他行):
total2 = {a: 0.85, b: 1.2, c: 1.01}
此代码本质上是计算每个人的“生产力分数”。决策变量 x 仅出于业务目的查看每个单独的地点,因此它不能包含人员标识符。此外,Gurobi 包对如何格式化事物有很大的限制,所以我还没有找到一种方法来使用 x 的元组键。
【问题讨论】:
-
请提供一些简短的输入和输出数据样本。
-
你是如何得到
total2中的这些数字的? -
抱歉,我没有对样本数据进行实际数学计算。这些是我使用整个数据集得到的结果,其中每个地方的每个人都包含超过 100 行。
标签: python python-3.x dictionary