Python 从基字典开始,通过排列/组合生成字典,并将结果与基于键值的真/假基关联

Python 从基字典开始,通过排列/组合生成字典,并将结果与基于键值的真/假基关联,python,python-2.7,python-2.x,Python,Python 2.7,Python 2.x,我的结构类似于字典: c = { 'usize': { '500': False, '100': True} 'isize': { '200': False, '800':False, '900':True} 'path': {'/tmp': False, '/var':True, '/tp12':False;} } 我需要组合所有的值,创建一个新字典数组,并将字典与基于键的Bollean值相关联。可以使用字典以外的东西 例如: c1 = { 'usize': 500, 'is

我的结构类似于字典:

c  = {

'usize': { '500': False, '100': True}

'isize':  { '200': False, '800':False, '900':True}

'path':  {'/tmp': False, '/var':True, '/tp12':False;}

}
我需要组合所有的值,创建一个新字典数组,并将字典与基于键的Bollean值相关联。可以使用字典以外的东西

例如:

c1 = {

'usize': 500,
'isize': 200,
'path': '/tmp' }

Associated value, False and False and False = False

c2 = {

'usize': 100,
'isize': 900,
'path': '/var' }

Associated value, True  and True and True = True

c2 = {

'usize': 500,
'isize': 900,
'path': '/var' }

Associated value, False  and True and True = False

我可能有一个建议,就是制作一个组合字典,将嵌套键与分隔符链接在一起(我选择了
也可以使用任何其他分隔符)

因此,原始词典更改为

{'usize:500': False, 'usize:100': True, 
'isize:200': False, 'isize:800': False, 'isize:900': True, 
'path:/tmp': False, 'path:/var': True, 'path:/tp12': False}
通过代码

res = {'{}:{}'.format(key1,key2):value for key1,value1 in c.items() for key2, value in value1.items() }
print(res)
然后,我们可以轻松地使用
res
字典计算
c1,c2…
的布尔值,然后使用
c1,c2..
等的键、值对进行迭代

c1_val = all(res['{}:{}'.format(k,v)] for k,v in c1.items())
print(c1_val)

c2_val = all(res['{}:{}'.format(k,v)] for k,v in c2.items())
print(c2_val)

c3_val = all(res['{}:{}'.format(k,v)] for k,v in c3.items())
print(c3_val)
输出将是

False
True
False
您可以使用和对输出进行一些操作来获得所需的dict

from itertools import product

c  = {

'usize': { '500': False, '100': True},

'isize':  { '200': False, '800':False, '900':True},

'path':  {'/tmp': False, '/var':True, '/tp12':False}

}

result = []
for group in product(*c.values()): #this makes all product groups of values such as (500, 200, '/var') etc.
    temp = dict(zip(c.keys(), group)) #bring back the keys for every group
    #create a new 'value' key with the boolean result
    temp['value'] = all(c[k][v] for k, v in temp.items()) #change to .iteritems() for python 2
    result.append(temp)
print(result)
输出:

[{'usize': '500', 'isize': '200', 'path': '/tmp', 'value': False},
 {'usize': '500', 'isize': '200', 'path': '/var', 'value': False},
 {'usize': '500', 'isize': '200', 'path': '/tp12', 'value': False},
 {'usize': '500', 'isize': '800', 'path': '/tmp', 'value': False},
 {'usize': '500', 'isize': '800', 'path': '/var', 'value': False},
 {'usize': '500', 'isize': '800', 'path': '/tp12', 'value': False},
 {'usize': '500', 'isize': '900', 'path': '/tmp', 'value': False},
 {'usize': '500', 'isize': '900', 'path': '/var', 'value': False},
 {'usize': '500', 'isize': '900', 'path': '/tp12', 'value': False},
 {'usize': '100', 'isize': '200', 'path': '/tmp', 'value': False},
 {'usize': '100', 'isize': '200', 'path': '/var', 'value': False},
 {'usize': '100', 'isize': '200', 'path': '/tp12', 'value': False},
 {'usize': '100', 'isize': '800', 'path': '/tmp', 'value': False},
 {'usize': '100', 'isize': '800', 'path': '/var', 'value': False},
 {'usize': '100', 'isize': '800', 'path': '/tp12', 'value': False},
 {'usize': '100', 'isize': '900', 'path': '/tmp', 'value': False},
 {'usize': '100', 'isize': '900', 'path': '/var', 'value': True},
 {'usize': '100', 'isize': '900', 'path': '/tp12', 'value': False}]

你有<代码> C1 <代码> C2< /代码>和<代码> C3,你想有一种方法来评估它们的相关值,或者你想把所有元素的字典列表创建给相关的值吗?此外,除非你有很好的理由使用Python 2,否则强烈地考虑切换到Python 3。Python 2将在2020年发布。我很困惑OP是想评估c1、c2等,还是想把所有评估的列表作为一个查找表@Paritossingh,似乎是后者,我的回答完全忽略了这一点。loleh,这是真的。一切都好。op说“我需要结合所有的价值观”,所以我相当确定他们需要所有可能的产品。