gpt4 book ai didi

python - 如何使用其中一个属性作为键,从类实例列表创建字典。

转载 作者:太空宇宙 更新时间:2023-11-03 15:40:06 24 4
gpt4 key购买 nike

我有一个函数(createList),它从文本文件中读取并从文件中的每一行创建类实例。然后该函数返回类实例的列表。现在我想做的是使用其中一个属性作为键从此列表创建一个字典。

def createDict():
list = createList()
fileAsDict = {}
for i in list:
fileAsDict[i.name] = i

return fileAsDict

这似乎是一个简单的解决方案,但我注意到文本文件上的多个实例具有相同的“ key ”。我编写的代码无法处理此问题,并且每次找到相同的 i.name 时都会覆盖键的值。我想要的是将值存储在列表中,以便当我调用该键时,它会打印具有该属性的所有类实例。

我发现了一些提示,例如

for key, val in l:
d.setdefault(key, []).append(val)

但我不知道如何将其实现到我的代码中。

最佳答案

使用setdefault,您的做法是正确的。您只需将 key 替换为 i.name 即可。这是一个显示逻辑的简单示例实现:

>>> # create a dummy class, so we can put some
>>> # instances in a list
>>> class Dummy:
def __init__(self, name):
self.name = name


>>> # create a list with Dummy() class instances. Uh oh! some of them have the
>>> # same value for self.i
>>> classes = [Dummy('a'), Dummy('b'), Dummy('b'), Dummy('c'), Dummy('d')]
>>>
>>> # now we'll create the dictionary to hold the class instances.
>>> classes_dict = {}
>>>
>>> # Here we are iterating over the list. For every element in the list,
>>> # we add to the dict using setdefault(). This means that if the element
>>> # key is already in the dict, we append it to the key's list. Otherwise,
>>> # we create a key with a new, empty list.
>>> for each_class in classes:
classes_dict.setdefault(each_class.name, []).append(each_class)


>>> # final result
>>> classes_dict {'a': [<__main__.Dummy object at 0x0000020B79263550>],
'b': [<__main__.Dummy object at 0x0000020B792BB1D0>,
<__main__.Dummy object at 0x0000020B792BB320>],
'c': [<__main__.Dummy object at 0x0000020B792BB358>],
'd: [<__main__.Dummy object at 0x0000020B792BB390>]}
>>>

关于python - 如何使用其中一个属性作为键,从类实例列表创建字典。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42213338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com