所以我的主要目標很簡單,我希望在使用單個鍵時返回多個值。但是,我收到錯誤和令人困惑的行爲。我是Python新手,所以我完全期待這個問題存在一個簡單的原因。python中的一個鍵的多個值
我有一個對象列表list
其中只包含對象的索引。即
1
2
3
4
etc..
和包含每個對象所屬的組的文件以相同的順序列出。該文件是n行的單個值(n爲對象的列表的長度爲好。)即文件看起來像這樣:
2
5
2
4
etc..
意味着第一對象屬於第2組,所述第二對象中第5組,第2組第4組和第4組。這個文件將根據我的輸入文件而改變。我嘗試了以下兩個建議(我可以找到)。
編輯:我的最終目標是:將字典的組號作爲鍵和組中的對象作爲值。
我看着這個StackOverflow的question第一求助,因爲它是如此的相似,並結束了這段代碼:
def createdDict(list, file):
f = open(file, 'r')
d={}
i=0
for line in f:
groupIndex = int(line)
if groupIndex in d:
d[groupIndex].append(list[i])
else:
d[groupIndex] = list[i]
i +=1
print d
f.close()
而這個錯誤:
AttributeError: 'Element' object has no attribute 'append'
d[groupIndex]
僅僅是一個字典,它的鍵和groupIndex
也應該只是一個整數..不是我在前面創建的類中的一個對象。 (爲什麼會出現這個錯誤?)
然後我在修改我的代碼後,遇到這個other question就像下面這樣,因爲我認爲這是完成我的任務的另一種方式。我的代碼則是這樣的:
def createdDict(list, file):
f = open(file, 'r')
d={}
i=0
for line in f:
groupIndex = int(line)
if groupIndex in d:
d.setdefault('groupIndex', []).append(list[i])
else:
d[groupIndex] = list[i]
i +=1
print d
f.close()
這段代碼中的錯誤或我要,而是(我相信)是在小組的最後一個對象是什麼並沒有結束......所以print d
給我放置在組中的鍵和最後一個對象(而不是所需的:該組中的所有對象),然後終端隨機分出groupIndex
,然後是list
中的所有對象。
我的問題:我在這裏錯過了什麼?人們對我所鏈接的問題的答案讚不絕口,所以它們很可能是正確的,我可能會錯誤地實施它們。我不需要對這兩個過程進行更正,但是對於將多個值附加到一個密鑰的問題的最有效答案。什麼是完成這項任務最pythonic的方式?
編輯2:如果這有幫助,這裏是第一種方法引用錯誤的類。我不知道它是如何定義這個代碼的任何部分作爲這個類的一部分。我還沒有真正開發過,但我所有的答案,因此,如果這有助於定位錯誤:
class Element(object):
def __init__(self, globalIndex):
self.globalIndex = globalIndex
def GetGlobalIndex (self):
return self.globalIndex
globalIndex
是對象(元素)的一個單獨的索引。與我目前的問題,我正在列出這些元素(這是前面提到的列表),並根據我的文件(前面也提到)將它們分組爲較小的組。爲什麼我認爲它應該不重要,這個列表本質上是對整數的計數......它會如何混淆我的代碼?
什麼是您預期的輸出?字典不支持'append()'這就是爲什麼你會得到'AttributeError'。 – 2012-07-09 19:35:33
我想要一個字典,其中的組號碼是關鍵字,其中的對象是值。 – Ason 2012-07-09 19:36:43
@AshwiniChaudhary:錯誤提到一個'Element'對象。我猜在OP的代碼中有一個類沒有在這裏顯示 – inspectorG4dget 2012-07-09 19:37:36