2015-01-21 3 views
-1

키에 여러 값이있는 사전에서 값을 검색하고 싶습니다. 경우에 따라 키 일치가 없으므로 None을 반환하고 싶습니다. 단일 값 키가 dictionary.get(key,None) 인 경우 쉽게 수행 할 수 있지만 키마다 여러 값을 사용하여 쉽게 수행 할 수있는 방법은 무엇입니까?키당 여러 값이있는 Dictionary.get - 일치하지 않음

import datetime 
test = { 
    u'ID1': {'End Date': None, 'Start Date': datetime.datetime(2014, 9, 22, 0, 0)}, 
    u'ID2': {'End Date': None, 'Start Date': datetime.datetime(2014, 9, 18, 0, 0)} 
} 


print test.get('ID1','Start Date',None) 
print test.get('ID3','Start Date',None) 
+0

가능성이 할 수있는 더 좋은 방법이,'테스트 [ "ID1", "종료 날짜"] = None' 같은 튜플 키 확인하는 것입니다 test.get (("ID1", "종료 날짜"), 없음)'. – jpkotta

+0

: 사전의 키에 여러 값이 없습니다. 오히려 데이터 구조에 중첩 된 dicts가 있으며 각 레벨에 대해 하나의 키가 필요합니다. – acushner

+0

키가 있는지 확인하십시오. –

답변

1

중첩 된 사전이있어서 두 번의 조회가 필요합니다. 당신은 당신이 찾고있는 것을 수행하는 함수를 만들 수 있습니다.

def getNestedDict(d, key1, key2, default): 
    result1 = d.get(key1) 
    if result1 is None: 
     return default 
    else: 
     return result1.get(key2, default) 

print getNestedDict(test, 'ID1', 'Start Date', None) 
+0

'get'의 기본값은'None'입니다. 즉, 그냥'd.get (key1)'을 호출하십시오 – acushner

+0

key2는 무엇입니까 존재하지 않습니까? 키가 있는지 쉽게 확인하는 것입니다. –

+0

예제를 통해 key1과 key2가 무엇인지 보여주는 더 명확한 주석이 업데이트되었습니다. – tgrosinger

1
test.get('ID1', {}).get('Start Date') 

또는 :

try: 
    return test['ID1']['Start Date'] 
except KeyError: 
    return None 
+0

처음 시작 날짜가 정말 마음에 듭니다. 문자열을 반환 할 수 있습니까? 이것에 대한 어떤 문서를 알고 있습니까? – user2242044

+0

키가없는 경우'.get()'의 기본 반환 값은 None입니다. 'None'을 원하지 않는다면 원하는 것을 사용하십시오. https://docs.python.org/2/library/stdtypes.html#dict.get – Eevee