2017-12-05 31 views
0

사전 값 세트를 검색하고 사용자 입력과 일치하는 값에 대해 메소드를 수행하는 프로그램에서 작업하고 있습니다. 이 값들을 비교하고 정렬해야합니다. 파이썬 사전 값을 반복하는 데 도움이 필요합니다

내가

import nation 
import pickle 

KK = 1000000 

pickle_in = open("nationsDict.dat","rb") 
d = pickle.load(pickle_in) 

k = raw_input("Enter a continent: ") 

for value in d.values(): 
    if k in d.values()[0]: 
     print d.values()[0] 

코드 국가 클래스

class Nations: 

    KK = 1000000 

    def __init__(self, ctry, cont, pop, area): 
     self.country = ctry 
     self.continent = cont 
     self.population = float(pop) 
     self.area = float(area) 

    def popDensity(self): 
     popDensity = (self.population*self.KK)/self.area 
     popDensity = str(round(popDensity, 2)) 
     return popDensity 
가치 검색에 지금과

코드를 작업하고 (매우 거친) 비교있어 코드

피클 사전 생성 코드

import nation 
import pickle 


i=0 
dictUN = {} 

with open('UN.txt') as f: 
    for line in f: 

     """Data get from file""" 
     elements = line.strip().split(",") 

     n = nation.Nations(elements[0],elements[1],elements[2],elements[3]) 

     """Density""" 
     n.popDensity() 
     print "The density of", n.country, "is",n.popDensity(),"people per square mile." 

     """Dictionary creation""" 
     dictVal = (n.continent, n.population, n.area) 
     dictUN.update({n.country: dictVal}) 


pickle_out = open("nationsDict.dat", "wb") 
pickle.dump(dictUN, pickle_out) 
pickle_out.close() 

다음은이 시점에서

Mauritania,Africa,3.5,397954 
Mauritius,Africa,1.3,787 
Mexico,North America,120.3,761606 
Micronesia,Australia/Oceania,.11,271 
Monaco,Europe,.031,0.76 
Mongolia,Asia,3.0,603909 
Montenegro,Europe,.65,5019 
Morocco,Africa,33.0,172414 

내 문제가 꽤 값 검색에 포함와 비교된다 UN.txt

에서 미리보기입니다. 특히, 내 프로그램은
  1. 하려면 사용자가
  2. 비교 일치하는 모든 국가에 Nations.popDensity (국가 클래스에 포함) (값 목록의 첫 번째 요소) 대륙
  3. 이 방법을 수행을 검색 할 수있다 대륙마다 상위 5 개의 밀도 값을 반환합니다.

나는 하나의 큰 질문은 값의 요소로 사전 검색을 처리하는 방법이라고 말하고 싶습니다. 또한 대륙 요소를 키로 사용하여 임시 사전을 작성하는 방법에 대해 생각해 봤지만 popDensity 메소드를 수행해야하므로 내 인생을 더 쉽게 만들어 줄지 확신하지 못합니다.

감사합니다. 감사합니다. 사전을 통해

+0

목록의 독해가있는 것처럼, 사전의 이해가 있습니다 ... 꽤 멋진 물건입니다! 'd [k]}의 인 경우 d.keys()의 k에 대한 d2 = {k : d [k]는 사용자의 요구 사항을 충족하는 원본 dict의 하위 집합을 제공합니다. 모든 코드를 검토하지 않았기 때문에 d [k] 부분에' '을 채워야합니다. 네가 가진 주요 질문이라고 했지. 호프 풀은이를 해결할 수있는 충분한 기회를 제공합니다. – Gary02127

+0

완벽하게 작동했습니다. 사전/목록 이해에서 지금 읽고있을 것입니다 : D – user8585343

+0

정보가 도움이 되었기를 기원합니다! 답변으로 추가 했으므로 결과에 만족한다면 받아 들일 수 있습니다. – Gary02127

답변

0
  1. 초기화 팬더 시리즈 개체
  2. 으로 반복.
  3. 대륙이 일치하는 경우 :

    a. 인구 밀도를 계산하십시오.

    b. 값이 팬더 시리즈의 가장 작은 값보다 큰 경우 :

    i. 인덱스

    III에 팬더 시리즈 값으로 값 ii.append 마지막 항목

    와 국가를 분리합니다. 당신이 반복적으로이 작업을 수행 할 것 다음 시간을 절약 할 수 확실히 continent-> 국가 사전을 만드는 경우

거짓 팬더 시리즈 개체의 상승을 = 정렬합니다.

0

도움이되었다 니 다행입니다. 나는 그것을 답으로 추가 할 것이므로, 원한다면 받아 들일 수 있습니다.

목록의 독해가있는 것처럼, 사전의 이해가 있습니다 ... 꽤 멋진 물건입니다! d2 = {k:d[k] for k in d.keys() if <some_elem> in d[k]}은 요구 사항을 충족하는 원본 사전의 하위 집합으로 사전을 제공합니다. 모든 코드를 완료하지 않았기 때문에 <some_elem> in d[k] 부분을 채워야합니다. 네가 가진 주요 질문이라고 했지. 잘하면이 문제를 해결할 수 있습니다.