查找字典中的所有常用值和子常用值

问题描述:

我是在python中使用dicitonaries的新功能。我手边有一个简单的问题。我有一个名为“输入”的口号。查找字典中的所有常用值和子常用值

Input={'VAR1':['K1','K2','K3','K4','K5...'], 
'VAR2':['K3','K4',...], 
'VAR3':['K2','K4','K5',...]} 

词典“输入”中的键数量可能会有所不同。我渴望的输出是让所有常用值的列表,我想获得小组共同价值观作为字典

'K4' string common in all the lists (for all key values) 
'K3' is only present in the list with key'VAR1' and 'VAR2'. 

所以它帮助,如果我有相应的键

输出:

Common_Value=['K4',....] 

Subcommon_Values1=['VAR1':['K3....'],'VAR2':['K3....']] 
Subcommon_values2=['VAR1':['K5',...],'VAR3':['K5',....]] 

任何人都可以帮助我吗?

谢谢

+0

您能否证明*自己努力解决这个问题? –

+0

你是如何确定什么是常见的和子公司的价值观,如果不是以编程的方式在概念上? –

+0

我只是检查字符串'K4'是否存在于所有键的所有值列表 – ayaan

这将让你所有的共同的价值观:

sect = None 
for k,v in Input.items(): 
    if sect == None: 
     sect = set(v) 
    else: 
     sect = sect.intersection(set(v)) 
Common_Value = list(sect) 

直到你清楚你的不同SubCommonValues结果和他们的实际结构(你似乎有列表中的键)之间的差异,不能确定这是你想不想要的:

all = None 
for k,v in Input.items(): 
    if all == None: 
     all = set(v) 
    else: 
     all = all.union(set(v)) 
diff = all.difference(sect) 
uncom = { x:list() for x in diff } 
for x in diff: 
    for k,v in Input.items(): 
     if x in v: 
      uncom[x].append(k) 
grps = {} 
for k,v in uncom.items(): 
    kv = tuple(v) 
    if kv not in grps: 
     grps[kv] = [k] 
    else: 
     grps[kv].append(k) 
for k,v in grps.items(): 
    print({ x:v for x in k }) 
+0

如上例所示的输出。 'K3'存在于键列'VAR1'和'VAR2'的列表中,但不存在于'VAR3'列表中。因此,为了知道'K3'字符串的存在位置,我将需要它是一个字典 – ayaan

+0

对于迟到的回复感到抱歉。但是当我运行你的代码片段时,我得到一个属性错误。我使用Python 3.5 – ayaan

+0

感谢您的想法和您的代码。为了适应我的需要,我改编了一下 – ayaan

,你可以这样做:

result=[i for i in Input if "K4" in Input[i]] 

例子:

>>> Input={'VAR1':['K1','K2','K3','K4','K5'],'VAR2':['K3','K5'],'VAR3':['K2','K4','K5']} 
>>> result=[i for i in Input if "K4" in Input[i]] 
>>> result 
['VAR1', 'VAR3'] 

编辑

也许是这样的:

commonValues=['K4', 'K2'] 
result=[i for i in Input if set(commonValues).issubset(set(Input[i]))] 

这将返回key列表中你Inputdict包含commonValues列表的所有元素...

+0

我试过,但我需要在一个列表中的常见值和列表的大小可能会有所不同,所以我无法进行比较。 – ayaan

+0

请参阅编辑我的文章 – Dadep

+0

谢谢我检查它.. @ Dadep – ayaan