2016-07-26 4 views
0

나는이 사전을 정렬하는 방법을 알아 내려고 노력해 왔습니다. 및 d2 사전에 d3.중첩 사전 정렬

breakfast {'eggs': 1, 'cheese': 1} 
dessert {'cream': 1, 'cake': 1} 
breakfast {'eggs': 1, 'cheese': 1} 
dessert {'cream': 1, 'cake': 1} 
breakfast {'eggs': 1, 'cheese': 1} 
dessert {'cream': 1, 'cake': 1} 
breakfast {'eggs': 1, 'cheese': 1} 
dessert {'cream': 1, 'cake': 1} 

그것은 두 breakfastdessert 올바르게, 다음 내부 dessert, 'cream''eggs'가 잘못된 순서대로 정렬 :

d1 = {'eggs':1, 'cheese':1} 
d2 = {'cake':1, 'cream':1} 
d3 = {'breakfast':{},'dessert':{}} 
d3['breakfast'] = d1 
d3['dessert'] = d2 
for k,v in sorted(d3.items()): 
    for k,v in sorted(d3['breakfast'].items()): 
     for k,v in sorted(d3.items()): 
      print(k,v) 

이 출력됩니다.

그것은해야한다 :

dessert {'cake':1, 'cream':1} 

그것은 또한 "분류"사전을 d3 네 번 인쇄, 나는 이유를 정확히 모르겠어요.

내가 아는 한 더 효과적인 방법이있을 수 있으므로 모든 정보를 환영합니다.

+0

귀하의 질문에서 분명하지 않으므로 원하는 결과 (예 :보고 싶은 출력)를 설명해주십시오. – Amadan

+0

이것은 마지막 논리적 변수 일 뿐이므로 두 개의 결과를 얻을 수 있기 때문에 논리적 인 코드입니다. –

+0

모든 루프 변수가 같은 3 개의 중첩 된 'for'루프가 있어서는 안됩니다 (' k'와'v') 두 개의 외부 루프는 기본적으로 내부 루프를 4x로 실행하기 때문에. 'print (k, v)'를 실행하는 것은 정렬되지 않은 전체 사전 인'v'를 출력한다는 것을 주목하십시오. –

답변

2

그래서 알고리즘에는 몇 가지 문제가 있습니다. 대부분 네 번 중첩되어 매번 같은 일을 반복합니다. 여기에 더 나은 알고리즘입니다 :

for k,v in sorted(d3.items()): 
    print(k + ":") 
    for k2,v2 in sorted(v.items()): 
     print("\t" + k2 + ", " + str(v2)) 

그것은 다음과 같이 대답의 형식 :

breakfast: 
    cheese, 1 
    eggs, 1 
dessert: 
    cake, 1 
    cream, 1 

내가 의도 한 형식이 무엇인지 확실하지 않았다 - 희망 당신은 당신이 원하는 무엇으로 수정할 수 있습니다. 보시다시피, 이번에는 d3보다 먼저 d3 을 반복하고 d3을 다시 반복합니다. 즉, 같은 사전을 여러 번 인쇄하기 전에 수행했던 작업이 아니라 중첩 된 사전에서 한 단계 깊숙이 들어가는 것을 의미합니다.

+0

그래서 나는 그것을 시험해 보았다. 왜냐하면 나에게 오류를 주었기 때문에 인쇄 문장에()를 추가해야만했다. 처음에는 작동하지 않았지만 그 다음에는 잘못된 것을 둘러 쌌다. 그 일 지금 고마워! 이 코드는 어떻게 동작하는지 아이디어를 얻은 테스트 코드 일뿐입니다. – Doppel

+0

당신에게 효과가 없었습니까? 당신이 뭔가 다른 것을하려고 했습니까? 그보다 더 많은 정보가 필요합니다. – James

+0

죄송합니다. 입력을 계속하면 라인이 내려갈 때 주석이 게시됩니다. 메신저 내 기본 프로그램에 이것을 구현하려고, 내가 좀 더 도움이 필요하면 그냥이 질문에 그것을 추가 할 수 있습니까? – Doppel

0
d1 = {'eggs':1, 'cheese':1} 
d2 = {'cake':1, 'cream':1} 
d3 = {'breakfast':{},'dessert':{}} 
d3['breakfast'] = d1 
d3['dessert'] = d2 
for key,val in sorted(d3.items()): 
    print(key,val) 
+1

자세한 내용을 편집하십시오. 코드 전용 및 "시도하십시오"답변은 검색 가능한 콘텐츠가 없으므로 권장하지 않으며 누군가가 "시도해"야하는 이유를 설명하지 않습니다. – abarisone