2014-03-31 3 views
1

저는 여전히 비교적 새로운 파이썬입니다. 그리고 때로는 비교적 간단해야하는 뭔가가 나를 도망칩니다.사전의 파이썬 함수 인수 목록

POST 작업의 결과를 사전 정의로 포맷 된 문자열로 데이터베이스 테이블에 저장하고 있습니다. 그런 다음 그 값을 가져 와서 eval()을 사용하여 실제 dict 객체로 변환합니다. 사전 데이터 요소의 데이터 유형 (날짜, 날짜, 정수, 부동 소수점, 문자열 등)을 보존하므로 큰 효과가 있습니다.

내가 잘못 본 것은 결과 사전을 사용하여 함수 또는 메서드에 전달할 수있는 키워드 인수를 구성하는 것입니다. 지금까지, 나는이 일을 할 수 없었고, 이것에 접근하는 가장/가장 Pythonic 한 방법을 찾아 냈습니다. 사전을 사용하면 사전 요소를 반복하고 키/값 쌍을 쉽게 식별 할 수 있지만 함수 또는 메서드 호출에서 키워드 쌍의 집합으로 이러한 쌍을 사용하는 방법을 알지 못해서 당황 스럽다.

감사합니다.

+0

인가를? 'JSON'을 사전에'eval'로 바꾸는 더 좋은 방법이 있습니다. – cmd

답변

1

당신은 **kwargs 찾고 있습니다. 원하는대로 사전을 키워드 인수에 압축을 풉니 다. 함수 호출에서 다음을 사용하십시오.

some_func(**my_dict) 

여기서 my_dict은 언급 한 사전입니다.

0

@tzaman 및 @Alex_Thornton - 감사 - 답 솔루션에 저를 주도하지만, 답은 함수 호출 아닌 기능 정의**kwargs의 사용을 다시 명확하지 않았다. 그걸 알아내는 데는 시간이 걸렸습니다. 이전에 함수/메소드 정의에 사용 된 적이있는 **kwargs 만 보았습니다. 따라서이 사용법은 나에게 새롭습니다. @tzaman이 포함 된 링크는 "aha"순간을 촉발 시켰습니다. 여기

는 솔루션 구현하는 코드 : 당신은 문자열 결과가 JSON``아닌지 확인

def do_it(model=None, mfg_date=None, mileage=0): 
    # Proceed with whatever you need to do with the 
    # arguments 
    print('Model: {} Mfg date: {} Mileage: {}'.format(model, mfg_date, mileage) 

dict_string = ("{'model':'Mustang," 
       "'mfg_date':datetime.datetime.date(2012, 11, 24)," 
       "'mileage':23824}") 

dict_arg = eval(dict_string) 

do_it(**dict_arg) # <---Here is where the **kwargs goes - IN THE CALL