在Python中动态创建字典
我有以下清单和编号:在Python中动态创建字典,python,dictionary,truthtable,Python,Dictionary,Truthtable,我有以下清单和编号: list = ['B','C'] 我的表格需要的结果是: B C Prob 0 0 x 0 1 x 1 0 x 1 1 x 我如何建立这个真值表(可以有更多的虚数,而不仅仅是3)并为该行的概率分配一个数字 我需要用字典来构建它,我尝试了一些列表理解,但我不知道如何动态生成真值表,因为可能有多于/少于3个变量 编辑:更清楚地说,我的目标是拥有一本这样的词典: dict = {"B":0/1,"C":0/1,"Pr
list = ['B','C']
我的表格需要的结果是:
B C Prob
0 0 x
0 1 x
1 0 x
1 1 x
我如何建立这个真值表(可以有更多的虚数,而不仅仅是3)并为该行的概率分配一个数字
我需要用字典来构建它,我尝试了一些列表理解,但我不知道如何动态生成真值表,因为可能有多于/少于3个变量
编辑:更清楚地说,我的目标是拥有一本这样的词典:
dict = {"B":0/1,"C":0/1,"Prob":arbitraryNumber}
我需要将所有这些字典插入到一个列表中来表示一个表的结构,现在更清楚了吗
非常感谢您可以使用生成真值表,然后根据逻辑运算确定概率。我不知道您希望使用哪种逻辑操作,因此让我们仅在每行创建一个字典:
>>> l = ['B', 'C']
>>> truth_table = [dict(zip(l, x)) for x in product((0, 1), repeat=2)]
>>> print(truth_table)
[{'B': 0, 'C': 0}, {'B': 0, 'C': 1}, {'B': 1, 'C': 0}, {'B': 1, 'C': 1}]
为了计算概率,你可能需要一个单独的函数来计算。例如,值为0和1的两个键的逻辑析取基本上等同于max()
您可以使用 如果您想记录数据,请将
yield-combo
更改为yield-tuple(combo)
然后可以存储键值对,如:
d={}
for data in power_set(l):
d[data]="your_calc_prob"
print d
{(0, 1): 'your_calc_prob', (1, 0): 'your_calc_prob', (0, 0): 'your_calc_prob', (1, 1): 'your_calc_prob'}
如果要对输出进行排序,可以使用sorted()创建列表副本并返回列表:
sorted(list(power_set(l)))
Out[21]:
[[0, 0, 0],
[0, 0, 1],
[0, 1, 0],
[0, 1, 1],
[1, 0, 0],
[1, 0, 1],
[1, 1, 0],
[1, 1, 1]]
或者可以使用列表方法sort()对列表进行就地排序:
In [22]: data = list(power_set(l))
In [23]: data.sort()
In [24]: data
Out[24]:
[[0, 0, 0],
[0, 0, 1],
[0, 1, 0],
[0, 1, 1],
[1, 0, 0],
[1, 0, 1],
[1, 1, 0],
[1, 1, 1]]
跟进:)@秃鹰,你是如何计算概率的?@Padraiccningham我有一些XML文件中的数据,不需要计算问题编辑,请看一下;)酷!完美除了一件事:我得到的数字是“镜面反射的”,我的意思是第二行应该是001而不是100,你能解释我怎么做吗?你的意思是输出应该反转吗?我不知道反转在矩阵中的确切含义,但举个例子,我需要[000001010011100101110111],现在更清楚了吗?啊,好的,我明白了。当我回到电脑上时,我会编辑我的答案。没问题。您可能应该编辑您的问题以反映您需要的输出。
sorted(list(power_set(l)))
Out[21]:
[[0, 0, 0],
[0, 0, 1],
[0, 1, 0],
[0, 1, 1],
[1, 0, 0],
[1, 0, 1],
[1, 1, 0],
[1, 1, 1]]
In [22]: data = list(power_set(l))
In [23]: data.sort()
In [24]: data
Out[24]:
[[0, 0, 0],
[0, 0, 1],
[0, 1, 0],
[0, 1, 1],
[1, 0, 0],
[1, 0, 1],
[1, 1, 0],
[1, 1, 1]]