2015-02-04 5 views
2

필자는 값이 키와 값으로 사전 인 곳에서 키와 값의 사전을 만들려고하는 Python을 처음 접했습니다. 값이 값 목록에 있으면 키를 반환합니다. 작업 코드가 있지만 두 번째 사전을 추가하려고하면 코드가 중단됩니다.사전을 작성할 때 "unhashable type : 'set'"이 나타나는 이유는 무엇입니까?

이 작동 : 내가 잘못 뭐하는 거지

lookup = { 
    3: {{"TRUE", {"t", "true", "1", "yes"}}, {"FALSE", {"f", "fake", "farce", "fallacy", "falsehood"}}}, 
    4: {{"FALSE", {"f", "false", "0", "no"}}} 
} 

를 어떻게 해결합니까 :

lookup = { 
    3: ("TRUE", ["t", "true", "1", "yes"]), 
    4: ("FALSE", ["f", "false", "0", "no"]) 
    } 

이 작동하지 않는 이유는 무엇입니까?

답변

1

{"t", "true", "1", "yes"} 등이있는 집합을 사용할 수 없습니다. 키가 여러 값을 갖는 dicts의 dict을 원하면 목록, 튜플 또는 실제로 값을 저장할 집합을 사용하지만 집합을 키로 사용할 수 없습니다 그들은 해쉬하지 않기 때문에, 당신은 또한 키 짝을 만들어야합니다

lookup = { 
    3:{"TRUE": ["t", "true", "1", "yes"], "FALSE":["f", "fake", "farce", "fallacy", "falsehood"]}, 
    4: {"FALSE": ["f", "false", "0", "no"]}} 
사전인가를 닮았 set([1,2,3]) 또는 {1,2,3}, 후자를 사용하여 만들 수 있습니다

세트, 무엇 DICT 구문 다른 것은 키/값의 짝입니다 ie {1:[1,2]}

그냥 다른 방법을 사용하여 볼 수 있습니다. 요소에 액세스하려면

lookup = { 
    3:{"TRUE": {"t", "true", "1", "yes"}, "FALSE":{"f", "fake", "farce", "fallacy", "falsehood"}}, 
    4: {"FALSE": set(["f", "false", "0", "no"])}} 

: t 구문은 여러 값 세트에 저장되어있는 같은 딕셔너리를 생성 한 번 봐 가지고 원래 딕셔너리에서

In [17]: lookup[3]["TRUE"] 
Out[17]: {'1', 't', 'true', 'yes'} 

In [18]: lookup[3]["FALSE"] 
Out[18]: {'f', 'fake', 'fallacy', 'falsehood', 'farce'} 

을 당신은 키가, 2, 3, 4 문자열과 문자열 목록의 두 항목을 포함하는 튜플에 저장된 각 키의 값은 다음과 같습니다.

관련 문제