2016-12-27 1 views
-1

다음 dictionary를 사용하여 문자열 생성을 구현하려고합니다.중첩 된 dict 및 for 루프 내에서 파이썬 문자열 서식 지정

for ind_source in ["investingcom", "bloomberg", "ft"]: 
    print('SELECT {columns[ind_source]} FROM {table[ind_source]} \ 
    WHERE country={country[ind_source]} AND name={name[ind_source]}'.format(**query_args)) 

그러나이 오류를 반환 :

query_args= {"columns":{ "investingcom":"datetime, actual, forecast, previous", 
         "bloomberg":"datetime, Actual, `Surv(M)`, Prior", 
         "ft":"datetime, actual, forecast, prior"}, 
      "table":{"investingcom":"`all-data`.`indicators`", 
        "bloomberg":"`all-data`.`indicators-bloomberg`", 
         "ft":"`all-data`.indicators_ft"}, 
      "country":{"investingcom":"\"US\"", 
        "bloomberg":"\"US\"", 
         "ft":"\"United States\""}, 
      "name":{"investingcom":"\"Average Hourly Earnings (MoM)\"", 
        "bloomberg":"\"Average Hourly Earnings MoM\"", 
         "ft":"\"Average Hourly Earnings %% m/m\""} 
        } 

내가 만들 필요가 3 문자열, for 루프의 따라서 사용이

KeyError: 'ind_source' 

어떻게 만드는 어떤 제안 구현이 성공적입니까?

답변

1

나는 그것에게 그것에게 일부 조정과 그 방법을 수행 할 수있을 수 있지만 당신이 (당신의 예에서 시도하는 방식을하고 익숙하지 않다 그러나, 나는 이것을하는 방법은 다음과 같은 것입니다 :.

query_args= {"columns":{ "investingcom":"datetime, actual, forecast, previous", 
         "bloomberg":"datetime, Actual, `Surv(M)`, Prior", 
         "ft":"datetime, actual, forecast, prior"}, 
      "table":{"investingcom":"`all-data`.`indicators`", 
        "bloomberg":"`all-data`.`indicators-bloomberg`", 
         "ft":"`all-data`.indicators_ft"}, 
      "country":{"investingcom":"\"US\"", 
        "bloomberg":"\"US\"", 
         "ft":"\"United States\""}, 
      "name":{"investingcom":"\"Average Hourly Earnings (MoM)\"", 
        "bloomberg":"\"Average Hourly Earnings MoM\"", 
         "ft":"\"Average Hourly Earnings %% m/m\""} 
        } 

for ind_source in ["investingcom", "bloomberg", "ft"]: 
    print('SELECT {} FROM {} \ 
    WHERE country={} AND name={}'.format(
     query_args['columns'][ind_source], 
     query_args['table'][ind_source], 
     query_args['country'][ind_source], 
     query_args['name'][ind_source], 
    )) 
0

방법에 대해 :

for ind_source in ["investingcom", "bloomberg", "ft"]: 
    print(('SELECT {columns[' +ind_source + ']} FROM {table[' + ind_source + ']} \ 
    WHERE country={country[' + ind_source + ']} AND name={name[' + ind_source + ']}').format(**query_args)) 

query_args 사전에 키 'ind_source'을 검색합니다 포맷 할 때 문자열 안에 'ind_source'을 넣어합니다. 이 사전에는 해당 키가 없기 때문에 오류가 발생합니다. 대신에 for 루프에서 ind_source의 현재 값으로 문자열을 연결하십시오.

+0

답장을 보내 주셔서 감사합니다. 그러나 지금은 다음과 같은 오류가 발생했습니다 : '단일'} '형식 문자열에 발생했습니다' –

+0

당신은 여전히 ​​마지막 키 (이름)을 수정해야합니다 –

+0

당신이 바로, 편집! –

1

나는 다음 시도 할 것이다 : tryi하는 대신

for ind_source in ["investingcom", "bloomberg", "ft"]: 
    print(
     ("SELECT {columns[%(ind_source)s]} FROM {table[%(ind_source)s]}" 
      "WHERE country={country[%(ind_source)s]} AND " 
      "name={name[%(ind_source)s]}" % { 'ind_source': ind_source }) 
    .format(**query_args)) 

기본적으로 원하는 쿼리를 얻을 연속 두 format 작업을 사용

0

합니다. 복잡한 형식을 사용하려면 먼저 데이터를 필터링하여 더 깨끗한 형식 문자열과 가독성을 얻으십시오.

query_args= {"columns":{ "investingcom":"datetime, actual, forecast, previous", 
         "bloomberg":"datetime, Actual, `Surv(M)`, Prior", 
         "ft":"datetime, actual, forecast, prior"}, 
      "table":{"investingcom":"`all-data`.`indicators`", 
        "bloomberg":"`all-data`.`indicators-bloomberg`", 
         "ft":"`all-data`.indicators_ft"}, 
      "country":{"investingcom":"\"US\"", 
        "bloomberg":"\"US\"", 
         "ft":"\"United States\""}, 
      "name":{"investingcom":"\"Average Hourly Earnings (MoM)\"", 
        "bloomberg":"\"Average Hourly Earnings MoM\"", 
         "ft":"\"Average Hourly Earnings %% m/m\""} 
        } 

for ind_source in ["investingcom", "bloomberg", "ft"]: 
    args = {x: query_args[x][ind_source] for x in query_args} 
    print('SELECT {columns} FROM {table} \ 
    WHERE country={country} AND name={name}'.format(**args))