2009-12-15 4 views
4

편집을 파이썬에서 사전의 항목을 연결 : 조금는 지능형리스트를 사용하여

이 어떻게 상대적으로 빠른 방법으로 형식

key1 = value1 
key2 = value2 

으로 사전에서 문자열을 얻을 수있는 질문을 명시했습니다? (일반 연결을 기준으로)이 같이

답변

10

없습니다.

파이썬 3.x를 :

for k,v in mydict.items(): 
    print(k, '=', v) 

파이썬 2.x에서 : 때문에 다른 답변에서 영업 이익으로 주석의

for k,v in mydict.iteritems(): 
    print k, '=', v 

편집 :

당신이 그것을 통과하는 경우 함수에 전달하고 여기에 출력하지 않는다면 생성자를 함수 나 dict 자체에 전달하고 함수가 필요한 모든 것을 처리하도록해야합니다 그거야.

이것은 심지어 필요하지 않은 범위 내부의 문자열로 변환하는 것보다 훨씬 낫습니다. 그 함수는 그것이 사용 된 곳이기 때문에 그렇게해야합니다.

주 기능을 편집하는 것이 문제가 아니기 때문에 래퍼 기능을 만들었습니다. 명시

def log_wrap(mydict): 
    mystr = '\n'.join(['%s = %s' % (k,v) for k,v in mydict.iteritems()]) 
    write_to_log(mydict) 

log_wrap(mydict) 
+0

내가 여기있는 네임 스페이스를 볼 수 없습니다 : –

+0

전달할 함수는 변경할 수없는 로깅 모듈에서 가져온 것입니다. – randomThought

+0

@Pavel - 예. : P @Jaelebi - 같은 문자열을 여러 번 동일한 로깅 함수에 전달하고 있습니까? 왜? –

2

: 여기에 지능형리스트를 사용하는 이유가

DATA = {'key1': 'value1', 'key2': 'value2'} 
print "\n".join(sorted(["%s = %s" % (k,v) for (k,v) in DATA.iteritems()])) 
8
print '\n'.join('%s = %s' % (key, value) for key, value in d.iteritems()) 
3

목록 이해가 루프를 방지하지하는 way to create list입니다 암시보다 낫다. PEP (202)에서
:

목록 함축은 상황에서 및/또는 중첩 루프가 현재 을 사용하는 것()지도() 및 필터 목록을 만들 수있는 더 간결한 방법을 제공합니다.

그래서 당신은 스스로에게 물어해야합니다
때 파이썬에서이 코드를 작성하는 것이 유용하다? 더 작아 질 수도 있지만 코드가 작성된 것보다 여러 번 읽혀 지므로 그 이점은 무엇입니까?

Tor Valamo의 솔루션은 원래 요청에서 묻지는 않았지만 제 의견으로는 더 읽기 쉽습니다. 이므로을 선호합니다. 질문 업데이트
str.join

편집 목록에서 빠른 연결을 구현하는 좋은 방법입니다 - 나디아와 리치가 그것을 사용하는 방법의 좋은 예입니다에서 응답합니다.
다시 말하지만, 이 아닌은 한 줄로 모든 것을 수행하지만, 난독성을 강조하기 위해 여러 단계로 나누었습니다.

mydict = {'a':1, 'b':2, 'c':3} 
for (key, value) in mydict.items(): 
    print key, '=', value 
+0

약간의 수정 후 내 대답의 삭제를 취소했습니다. 처음에는 튜플리스트로 반복 했으므로 잘못되었습니다. –

+0

전체 문자열을 함수에 전달하고자하므로이 메서드가 필요했습니다. 직접 루핑하는 경우에는 연결하거나 stringIO 함수를 사용해야합니다. 그리고 많은 시간을 할애해야합니다. – randomThought

+0

당신의 질문은 "형식으로 사전을 어떻게 출력 할 수 있습니까?"라고 우리가 대답했습니다. 당신이 다른 것을 필요로한다면 그 시나리오를 설명해야한다. 아마도 다른 최적화도있을 것이다. –

0

은 내가 파이썬 방법을 선호합니다. "범위"를 의미 했습니까?
+1

mydict.iteritems()는 거대한 dicts에 더 좋을 것입니다. –