2017-04-11 3 views
0

python에서 dicitonaries를 처음 사용했습니다. 손에 간단한 문제가 있습니다. 나는 "입력"이라는 dicrionary 있습니다.사전에서 모든 공통 및 하위 공통 값 찾기

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

... commonValues 목록의 모든 요소를 ​​포함하여 Inputdictkey의 목록을 반환합니다 서로 다른 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'목록에는 없습니다. 그래서 inorder는 'K3'문자열이 있는지 알고 싶습니다. 늦게 답장을 보내 주신 분 – ayaan

+0

사전이 필요합니다. 하지만 당신의 스 니펫을 실행할 때 나는 Attribute 에러를 얻는다. 나는 파이썬 3.5 – ayaan

+0

아이디어와 코드를 주셔서 감사합니다 사용하고 있습니다. 내 필요에 맞게 조금 chaned – 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'] 

편집 :

아마 뭔가 같은 :

당신까지

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

: 16,

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

이이 당신에게 일반적인 모든 값을 얻을 것이다

+0

나는 그것을 시도했지만 필요합니다. 하나의 목록에있는 공통 값과 목록의 크기가 다를 수 있으므로 비교할 수 없습니다. – ayaan

+0

내 게시물에서 편집을 참조하십시오. – Dadep

+0

감사합니다. 나는 그것을 확인하고 있습니다. @ Dadep – ayaan