У меня есть массив python (Arr) с числом j целых элементов, один список Z3 (X), значениями которого являются переменные z3 Int, и один словарь Z3 (D), значениями которого являются переменные Z3 Bool.
Например:
X = [ [ x_0_0, x_0_1, …, x_0_j], [ x_1_0, x_1_1, …, x_1_j], … [ x_i_0, x_i_1, …, x_i_j] ] X[0] = Arr /* Arr is python integer array */ D = { (x, i, j): D_x_i_j } for all i and j, and where x is the value present at X[i][j] location.
Остальные значения X[i1][j] определяются решателем в зависимости от значения D, т. е. True/False, где 1<=i1<=i.
Теперь эти решенные значения X являются ключевым значением словаря D.
Следовательно, я хочу использовать эти значения в качестве ключевого индекса словаря.
Мой вопрос заключается в том, как использовать значения списка Z3 в качестве ключевых значений словаря Z3 или в качестве индекса другого списка z3?
Вы можете превратить список в tuple
. Tuples
можно хэшировать и, как таковые, являются действительными ключами словаря.
d = {(x, i, j): D_x_i_j}
X[0] = Arr # [x, i, j]
key = tuple(X[0])
print(d[key]) # yields D_x_i_j
Вам нужно показать больше вашего кода. По сути, вы хотите запросить у решателя значения
X
(используяs.model()
), а затем преобразовать его в индекс (используя, скорее всего,.as_long()
), а затем просто использовать его как обычный индекс. Но не видя больше вашего кода, трудно сказать что-то более конкретное. Переполнение стека работает лучше всего, если вы можете опубликовать минимальный пример, который могут запустить люди, демонстрирующий проблему, с которой вы столкнулись.