2014-02-26 5 views
0

파이썬 사전은 실제로 저를 오늘 가지고 있습니다. 나는 스택 위에 쏟아져 내려 ​​왔고 파이썬 사전에있는 기존 키에 새로운 값을 추가하는 간단한 방법을 찾으려고 노력했다. 나는 모든 시도에서 실패하고 여기서 본 것과 같은 구문을 사용하고있다. 파이썬 사전에서 하나의 키에 여러 값 추가하기

#cursor seach a xls file 
definitionQuery_Dict = {} 

for row in arcpy.SearchCursor(xls): 

    # set some source paths from strings in the xls file 
    dataSourcePath = str(row.getValue("workspace_path")) + "\\" + str(row.getValue("dataSource")) 
    dataSource = row.getValue("dataSource") 

    # add items to dictionary. The keys are the dayasource table and the values will be definition (SQL) queries. First test is to see if a defintion query exists in the row and if it does, we want to add the key,value pair to a dictionary. 
    if row.getValue("Definition_Query") <> None: 

     # if key already exists, then append a new value to the value list 
     if row.getValue("dataSource") in definitionQuery_Dict: 
      definitionQuery_Dict[row.getValue("dataSource")].append(row.getValue("Definition_Query")) 
     else: 
      # otherwise, add a new key, value pair 
      definitionQuery_Dict[row.getValue("dataSource")] = row.getValue("Definition_Query") 

내가 속성 오류 얻을 :

AttributeError: 'unicode' object has no attribute 'append'

을하지만 대답은 here

을 제공 한 내가 같은 일을하고 생각

내가 일을하려고하고있는 무슨이다 여러 가지 다른 오류 메시지와 함께 운이없는 다양한 다른 방법을 시도했습니다. 나는 이것이 아마 간단하고 어쩌면 내가 웹상에서 적절한 출처를 찾을 수 없다는 것을 알고 있지만, 나는 붙어있다. 누구든지 도와 주겠니?

감사합니다, 마이크

답변

3

문제는 당신이 원래를 추가하려고 다음 문자열 (row.getValue의 즉, 결과)로 값을 설정 만하고 있다는 것입니다 이미 존재하는 경우. 원래 값을 단일 문자열을 포함하는 목록으로 설정해야합니다. 마지막 줄을 다음으로 변경하십시오.

definitionQuery_Dict[row.getValue("dataSource")] = [row.getValue("Definition_Query")] 

(괄호 값의 반올림에 유의하십시오).

ndpu는 defaultdict를 사용하면 좋은 점을 가지고 있습니다. 그러나 이것을 사용하는 경우 항상 append을 수행해야합니다. 즉, if 절에서 현재 수행중인 추가로 전체 if/else 문을 대체해야합니다.

+0

Ughh ... 나는 이런 것을 필요로한다는 것을 알았다. 값을 목록으로 설정하려면. 나는 내가 너무 많은 예제를 보았을 때 자신을 혼란스럽게 생각했다. 이것은 내가 필요한 것입니다. 감사! – Mike

2

사용 collections.defaultdict :

from collections import defaultdict 

definitionQuery_Dict = defaultdict(list) 
# ... 
+0

그럼 defaultdict를 가져 와서 내 변수를 definitionQuery_Dict = {}에서 definitionQuery_Dict = defaultdict (목록)로 변경하십시오. 그렇다면, 나는 여전히 같은 오류를 던지고있다 .... – Mike

2

사전에 키와 값이 있습니다. 값을 추가 할 때 각 값은 목록이나 다른 사전과 같이 확장/확장 할 수있는 유형이어야합니다. 현재 딕셔너리의 각 값은 문자열이며 대신 문자열을 포함하는 목록이 필요합니다. 당신이 목록을 사용하는 경우에는 같은 작업을 수행 할 수 있습니다

mydict = {} 
records = [('a', 2), ('b', 3), ('a', 4)] 

for key, data in records: 
    # If this is a new key, create a list to store 
    # the values 
    if not key in mydict: 
     mydict[key] = [] 
    mydict[key].append(data) 

출력 : 비록 'b'는 하나의 값이 여전히 목록에 넣어되어야한다는, 하나 개의 값을 가지고

mydict 
Out[4]: {'a': [2, 4], 'b': [3]} 

주, 그래서 나중에 추가 할 수 있습니다.

관련 문제