Как использовать значение списка в качестве индексов словаря в Z3py

У меня есть массив 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?

Вам нужно показать больше вашего кода. По сути, вы хотите запросить у решателя значения X (используя s.model()), а затем преобразовать его в индекс (используя, скорее всего, .as_long()), а затем просто использовать его как обычный индекс. Но не видя больше вашего кода, трудно сказать что-то более конкретное. Переполнение стека работает лучше всего, если вы можете опубликовать минимальный пример, который могут запустить люди, демонстрирующий проблему, с которой вы столкнулись.

alias 22.12.2020 16:42
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
139
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете превратить список в 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

Другие вопросы по теме