Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中动态创建字典_Python_Dictionary_Truthtable - Fatal编程技术网

在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]]