2012-06-25 8 views
1

나는 파이썬에 새로운 해요, 그냥 정말 그들이 딕셔너리를 구성하는 여기 일을하지 않는 것이 문파이썬은 사전 데이터 형식을 구성합니까?

data = dict((k, v) for k, v in data.items() if v != 'null') 

에 달렸다. 나 한테 조금 설명 할 수 있니? dict()에서 for 루프를 사용하는 이유와 if가 뒤 따르는 이유는 무엇입니까? 나는 파이썬 문서에서 이런 것을 보지 못했다.

고마워

+0

난 항상 쉽게이 구문을 발견 이해하다. 이 도움이됩니까? :'{k : v, k, v의 경우 data.items() if v! = 'null'} ' – KobeJohn

답변

5

이 코드는 dict 생성자를 사용하여 새 사전을 만듭니다. 생성자는 iterable 키, 값 쌍을 사용하여 새 사전을 초기화 할 수 있습니다. 다른 사람들이 지적했듯이, 예제 코드는 generator expression을 가지고 있습니다.이 값은 키와 값의 쌍으로 반복 가능합니다.

발전기 식 목록과 같은 약간의 역할과 같이 다시 쓸 수있다 :이 처리 될 때

mylist = [] 
for k, v in data.items(): 
    if v != 'null': 
     mylist.append((k, v)) 

그러나 실제로리스트를 생성 결코 단지 차례로 각 값을 산출 dict 생성자.

if이 루프 뒤에 오는 이유는 파이썬 개발자가 선택한 구문이므로 질문해야합니다. 그러나 다시 작성된 생성자 표현에서 if 문이 for 문 내부 (즉, 뒤에)에 있음을 알 수 있습니다. 내가 generator expressions in the python documentation에 있지만 unkulunkulu의 요청에 따라 섹션을 이미 연결 한

, 여기에 몇 가지 더 :

  1. 칼의 Groner의 Introduction to List Comprehensions
  2. 프레드릭 Haard의이 How to (Effectively) Explain List Comprehensions
+0

간단히 잘 설명했습니다 –

+0

목록 통합 설명서를 잘 링크하면 추측에 대한 답을 얻을 수 있습니다. 미리 upvoting : D – unkulunkulu

+0

고맙습니다, 좋은 설명. – hanhp

3

dict()의 인수로 구성된 키 튜플 값 쌍을 수득 발전기 식이다 (즉, (k, v))는 data.items()에서 도출.

>>> kvs = [('a', 1), ('b', 2)] 
>>> dict(kvs) 
{'a': 1, 'b': 2} 

if v != 'null' 한정자 즉,이다 (그 값이 그 요소를 이동/무시 발전기 지시 다음 dict() 내장 함수는 자동 목록 또는 튜플 시퀀스 예에서 사전 객체를 구성 할 튜플의 두 번째 항목)은 'null'과 같습니다 (정확하게 말하면 값이 'null'과 같지 않은 쌍만 나타납니다).

발전기 표현에 대한 자세한 설명은 PEP 289을 참조하십시오.

+0

아, 네 말이 맞아요, 나는 내 대답을 삭제하고 대신에 당신을 업 그레 이드했습니다. –

+0

@ KayZhu, 고마워, 많이 감사합니다. –