2016-10-04 3 views
0

저는 Python을 처음 사용하는데 문제가 있습니다. 값이있는 키를 찾으려고합니다. 그러나 키에는 여러 값이 있습니다.여러 값을 갖는 키가있는 사전의 공통 값을 찾습니다.

d = { 
    'a': ['john', 'doe', 'jane'], 
    'b': ['james', 'danny', 'john'], 
    'C':['john', 'scott', 'jane'], 
} 

나는 D의 값 john를 찾아 키가 A, B 얻고 c 또는 jane를 찾아 키 A와 C를 싶어.

+1

을 제공하는 방법입니다, 당신의 사전입니다 상하 반전. 이름 (예 :'john ')을 기준으로 조회하려면 키가되어야합니다. –

+0

@ idjaw 다음 코드를 시도했습니다. 나는 전혀 일하지 않았다. d.keys()의 이름 : d [이름] == 'john'인 경우 : 인쇄 이름 –

+0

@ import.zee 코드가 작동하지 않는 이유는 값이 여러 개의 이름 목록보다 개별 이름 문자열. 그러므로''존 ','doe ','jane ']! ='john '때문에'd [name] =='john '이면 테스트 할 수 없습니다. 대신에'in'리스트의 memebership 테스트 연산자를 사용할 필요가 있습니다 : d [name]' –

답변

1

이것은 쉽게 list comprehension을 사용하여 수행 할 수 있습니다. 모든 키/값 쌍 (for key,val in d.items())을 포함하고 값 목록 (if 'john' in val)에 대상 문자열이 들어있는 쌍만 선택하여 결과 목록에서 목록을 작성하는 dict 항목 목록의 모든 키/값 쌍을 반복합니다 키 ([ key ... ]).

>>> [ key for key,val in d.items() if 'john' in val ] 
['b', 'a', 'C'] 
>>> [ key for key,val in d.items() if 'jane' in val ] 
['a', 'C'] 
+0

Thanks'David에''john 'if. 완벽하게 작동했습니다. –

1

그래서 당신은 사전 항목을 통과해야하고 찾기 키워드가 항목 목록에있는 경우 다음 해당 키는 목록에 저장되어야하며,이 목록이 표시되어야한다.

d = {'a':['john', 'doe', 'jane'], 'b': ['james', 'danny', 'john'], 'C':['john', 'scott', 'jane'],} 
find ='jane' 

그래서이 논리는 파이썬

print ([m for m in d.keys() if find in d[m]]) 

로 작성된 것입니다 그리고 이것은 당신이 원하는 무엇을 정말 경우는 다음과 같은 출력을

['a', 'C'] 
관련 문제