2014-10-02 3 views
1

필자는 필자의 메인 스크립트에서 원하지 않는 피클 (대략 900 줄)을 나열한 파일을 가지고 있습니다. 나는 다음과 같은 일을한다.사전의 unpickle 목록

myDicts = [DictOne, DictTwo, ListOne, ListTwo] 
pickle.dump(myDicts, open("all.p", "wb")) 

이렇게하면 내 스크립트에로드되는 all.p 파일이 만들어집니다.

myDicts = pickle.load(open ("all.p", "rb")) 

여기 어떻게 이러한 사전에 액세스 할 수 있는지 알려드립니다. 가져온 사전은 어떻게 사용합니까? 길이 나 전체 목록을 인쇄하여 데이터가 있음을 알 수 있지만 여기에 액세스하는 방법에 대한 단서는 없지만 여기에있는 게시물 중 일부를 체크 아웃 할 수는 있습니다. 알아낼 수 없습니다.

if blah == "blah" and sum([x in "text" for x in myDicts(DictOne)]): 

단지 사전/목록을 저장하는 쉬운 방법이 있나요 :

if blah == "blah" and sum([x in "text" for x in DictOne]): 

그래서 난이 일을 시도 :

은 내가 일반적으로 같은 것을 할 것

시도 다시 사전/목록에?

DictOne = myDicts('DictOne') 
ListOne = myDicts('ListOne') 

또는 당신이 원래 목록을 절인 경우 목록에 자신의 인덱스를 참조하여 그 목록에 저장된 객체에 액세스 할 수

if flaga: 
    list=mydicts('ListOne') 
elif flagb: 
    list=mydicts('ListTwo') 
+0

왜 대신 하위 컨테이너를 모두 저장하는 목록의 사전을 사용하고 해당 키를 검색하지? – MackM

답변

2

당신은 쉽게 다음과 같은 값을 풀 수 : 당신이 필요로하는 경우 다음 ListOne, ListTwo을 추가 할 수 있습니다

DictOne, DictTwo, *_ = pickle.load(open ("all.p", "rb")) 

대신 *_의.

참고 : 파이썬 3.x.x가 필요합니다 *_을 사용하기 위해

+0

'* _' 문은 여기에서 더 자세히 설명됩니다 : http://stackoverflow.com/questions/12555627/python-3-starred-expression-to-unpack-a-list – MackM

+0

감사합니다. 이것은 이해하기 쉽고 간단합니다. 내가 뭘 찾고 있었는지. – user3699853

1

이있는 경우. 따라서 DictTwo을 얻고 싶다면 myDicts[1]으로 전화하면됩니다 (0부터 계산되기 때문에).

당신이 문자열 기반의 이름을 사용하여 호출 할 수있게하려면 (@MackM 코멘트에서 알 수 있듯이), 대신 목록의 사전 원래의 용기를 만들 수 있습니다

myDicts = {"DictOne": DictOne, "DictTwo": DictTwo, "ListOne": ListOne, "ListTwo": ListTwo} 

당신 기본 파이썬 data structures을 호출하는 방법을 읽어 볼 수 있습니다.

관련 문제