所以我的主要目标很简单,我希望在使用单个键时返回多个值。但是,我遇到了错误和令人困惑的行为。我是 Python 新手,所以我完全希望这个问题有一个简单的原因。
我有一个对象列表,list
其中仅包含对象的索引。IE
1
2
3
4
etc..
和一个文件,其中包含每个对象所属的组,以相同的顺序列出。该文件是 n 行的单个值(n 也是对象列表的长度。)即文件如下所示:
2
5
2
4
etc..
这意味着第一个对象属于第 2 组,第 5 组中的第二个对象,第 2 组中的第三个和第 4 组中的第四个。这个文件将根据我的输入文件而改变。我尝试了以下两个建议(我可以找到)。
编辑:我的最终目标:拥有一个字典,其中组号作为键,组中的对象作为值。
我首先查看了这个 StackOverflow问题以寻求帮助,因为它非常相似,最后得到了以下代码:
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
也应该是一个整数.. 不是我在脚本前面创建的类中的对象。(为什么会出现这个错误?)
然后我在遇到另一个问题后修改了我的代码,如下所示,因为我认为这是完成我的任务的另一种方法。然后我的代码如下所示:
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
.
我的问题:我到底错过了什么?人们对我链接的问题的答案表示赞同,因此它们很可能是正确的,而我很可能错误地实施了它们。我不需要对这两个过程进行更正,但是对于我将多个值附加到一个键的问题的最有效答案。完成这项任务的最蟒蛇方式是什么?
编辑2:如果这有帮助,这里是第一个方法也引用错误的类。我不知道它是如何将此代码的任何部分定义为此类的一部分。我还没有真正开发它,但我完全是为了一个答案,所以如果这有助于定位错误:
class Element(object):
def __init__(self, globalIndex):
self.globalIndex = globalIndex
def GetGlobalIndex (self):
return self.globalIndex
globalIndex
是对象(元素)的单独索引。对于我目前的问题,我正在列出这些元素的列表(这是前面提到的列表)并根据我的文件将它们分组为更小的组(也前面提到过)。为什么我认为这无关紧要,该列表本质上是整数的计数......它会如何与我的代码混淆?