2017-04-11 83 views
0

我是在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

回答

1

這將讓你所有的共同的價值觀:

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

1

,你可以這樣做:

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