从变量列表中创建布尔值字典



我正在尝试使用表达式的变量创建布尔值字典。因此,如果表达式1有变量{x,y,z},我可以创建一个字典,当生成时会返回类似{'x': True, 'y': True, 'z': True}, {'x': False, 'y': True, 'z': True} ... etc的内容

但我真的很挣扎,因为这个函数需要处理不同变量的集合/(也许我应该把它们做成列表?(,所以对于{x},字典应该是{'x' : True}, {'x' : False}

到目前为止,我正在尝试一种类似的代码

def dicx(self):
for i in self.vars():
dicxow = { i : True for i in self.vars() }
dicxow1 = dicxow.copy()
dicxow1 = {i : False for i in self.vars() }
return dicxow, dicxow1

其中CCD_ 5返回表达式中的所有变量。

我不知道该从哪里开始,因为我不知道如何为每个不同的变量只更改字典的一部分,所以任何提示都将不胜感激。我的任务包括使用类,所以我使用类来做这件事(我不确定这是否有什么不同(。

编辑:

好的,对不起,所以我只想为x数量的变量创建一个包含True和False的所有可能组合的字典,但我很难做到这一点。self.vars((从表达式中返回一组变量,例如{x,y},然后我想创建一个函数来生成x和y的True和False组合。

我认为这与您想要的非常接近。为了得到n变量的TrueFalse的所有组合,它只生成从0到2n-1的所有整数值。我把所有东西都放在一个伪class中,使它更像你的作业。

from pprint import pprint
class Expression:
def __init__(self, *variables):
self.variables = variables
def vars(self):
return self.variables
def dicx(self):
def bools(bit_string):  # Helper function
""" Convert string of binary chars to list of corresponding booleans. """
return [ch == '1' for ch in bit_string]
n = len(self.vars())
vals = list(range(2**n))
bits = [format(v, f'0{n}b') for v in vals]
return [dict(zip(self.vars(), bools(combo))) for combo in bits]

instance = Expression('x', 'y', 'z')
pprint(instance.dicx(), sort_dicts=False)

输出:

[{'x': False, 'y': False, 'z': False},
{'x': False, 'y': False, 'z': True},
{'x': False, 'y': True, 'z': False},
{'x': False, 'y': True, 'z': True},
{'x': True, 'y': False, 'z': False},
{'x': True, 'y': False, 'z': True},
{'x': True, 'y': True, 'z': False},
{'x': True, 'y': True, 'z': True}]

最新更新