2016-09-01 2 views
0

저는 사람들의 목록을 반복하고, 각 사람에 대해 알고있는 모든 것을 인쇄하면서 각 사람을위한 사전을 사용하도록 요청하는 연습 문제가 있습니다. 내 사전을 받아 들일 수 있도록 파이썬을 시작하려고하지만 내 코드를 실행하려고 할 때마다 "값 오류 : 압축 할 값이 너무 많습니다 (예상 값 2)"라는 오류 메시지가 표시됩니다.Python의 사람들 목록 반복에 대해 혼동을 들었습니다.

dictionaries_v = { 

    'first_name': 'victor', 
    'last_name': 'croc', 
    'age': 21, 
    'city': 'new york', 
    } 

dictionaries_c = { 

    'first_name': 'charmy', 
    'last_name': 'bee', 
    'age': 8, 
    'city': 'new york', 
    } 

dictionaries_e = { 

    'first_name': 'espio', 
    'last_name': 'armadilo', 
    'age': 15, 
    'city': 'new york', 
    } 

people = ['dictionaries_v', 'dictionaries_c', 'dictionaries_e'] 

for key, value in people: 

    print("\n" + key + ": " + value) 

감사합니다.

답변

0

people은 목록입니다. 목록에서 한 번에 하나의 값만 가져올 수 있습니다. 그러나 해당 요소는입니다. 그래서, 다음 루프는 작동합니다 :

for element in people: 
    for key, value in element: 
     print("\n" + key + ": " + value) 

외부 루프는 people 각 사전을 통과하고, 그 사전에 element을 설정합니다. 내부 루프는 해당 사전을 거쳐 key을 키로 설정하고 value을 값으로 설정합니다.

또한 people['dictionaries_v', 'dictionaries_c', 'dictionaries_e']으로 설정합니다. 각 요소를 문자열로 설정하는 대신 변수 자체 ([dictionaries_v, dictionaries_c, dictionaries_e])로 설정하십시오.

+1

그런 중첩 루프가 필요하지 않습니다. 목록의 각 반복은 목록의 각 사전이됩니다. 'element' =>'element.get ('last_name')' – idjaw

+0

OP는 사람에 대한 정보를 _all_ 인쇄하도록 요구하므로 for 중첩 된 for 루프는 모든 키/값 가져 오기를 수행합니다 한 쌍. –

+0

정확히. 첫 번째 루프에서 어느 것을 얻을 수 있습니다. 각 반복,'요소'는 각 사전을 보유합니다. 엄밀히 말하면 제공된 데이터를 기반으로 할 필요가 없습니다. – idjaw

0

목록에 문자열을 추가하고 있습니다. 변수 이름을 사용하십시오.

people = [dictionaries_v, dictionaries_c, dictionaries_e] 

편집 : 아래 풀고 문제를 해결 더 많은 코드를 추가. 목록은 세 가지 문자열를 들고 있음을

for person in people: 
    for key,value in person: 
     print key, " : ", value 
+0

이렇게해도 압축을 풀기에는 너무 많은 값의 문제가 해결되지 않습니다. –

3

첫 번째 문제입니다. 어떻게 주위에 따옴표를 싸는 지 주목하십시오. 그래서 당신이 당신의 목록을 반복 할 때, 당신은 확실히 당신이 기대하는 사전을 얻지 못할 것입니다.

둘째, peoplelist입니다. 따라서 목록을 반복 할 때 반복기는 각 반복을 통해 사전을 보유합니다. 이 문제를 알고

, 당신은 단순히 다른 목록과 같은 목록을 반복해야합니다

{'last_name': 'croc', 'age': 21, 'first_name': 'victor', 'city': 'new york'} 
{'last_name': 'bee', 'age': 8, 'first_name': 'charmy', 'city': 'new york'} 
{'last_name': 'armadilo', 'age': 15, 'first_name': 'espio', 'city': 'new york'} 

이 당신의 사전에서 특정 정보를 얻으려면, 당신을 : 같은

people = [dictionaries_v, dictionaries_c, dictionaries_e] 
for d in people: 
    print(d) 

귀하의 출력을 볼 것이다 각 반복에서 키를 사용하면됩니다. 간단한 예 :

for d in people: 
    print(d['last_name']) 
+0

출력에서 ​​키/값 쌍의 순서는 프로그램을 실행할 때마다 다를 수 있습니다. 사전이 반드시 순서를 유지하지는 않습니다. –

+1

@ NeeA.예, 저는 그것을 충분히 알고 있습니다. 모든 주문을 유지하는 것에 대해서는 언급하지 않았으며 주문을 유지할 필요가 없습니다. 목록에서하는 것처럼 사전의 데이터에 액세스하지 않습니다. 'd [ 'last_name']'을 할 때, 그것은 'last_name'이 사전의 첫번째 엔트리 여야한다는 것을 의미하지 않는다. 사전이 작동하는 방식이 아닙니다. – idjaw

+0

의견을 보내 주셔서 감사합니다. 내 목록의 작은 따옴표가 주된 문제였습니다. – PhantomDiclonius

관련 문제