向对象添加其他属性

问题描述 投票:0回答:1

我有一个带有两个属性的python对象;第一个是键,第二个是项列表,如下所示

Class Temp:
    def __init__(self,key,item_list):
         self.key=key
         self.item_list=item_list

我还有另一个来自数据库的对象列表。数据库查询产生的属性之一是“ item”。 “ item”值可以是对象中的item_list之一。 “项目”是唯一的。

ls=[]
ls.append(Temp('a',['1a','2q'])
ls.append(Temp('b',['3b','4m'])

来自数据库的数据

**id** |  **name**  |   **item**
______________________
1  | test   |   1a
2  | test2  |   2q
3  | test3  |   3b
4  | test6  |   4m

如果item列中的值与上述对象中“ item_list”中的值之一匹配,我想将来自数据库的对象添加到上述对象中。产生的结果应该看起来像

Temp ('a',['1a','2q'],List of rows (object) that matches column values of "item" #1st and 2nd rows of the table above)  
Temp ('b',['3b','4m'],List of rows (object) that matches column values of "item" #3rd and 4th rows of the table above)  

[感谢您的帮助

python-3.x
1个回答
0
投票

这可能与您期望的不完全相同,但是:

class Temp:
    def __init__(self,key,item_list, temp = None):
        self.key = key
        self.item_list = item_list
        self.temp = temp

    def get(self):
        return self.temp if [i for i in self.temp.item_list if i in self.item_list] else None

来自数据库的对象示例:

a = Temp('a', ['1a', '2q'])
b = Temp('b', ['3b', '4m'])
c = Temp('c', ['1f', '11'])
d = Temp('d', ['2g', '61'])
e = Temp('e', ['2y', '60'])
f = Temp('e', ['2g', '2q'])

如果项目在item_list上,则添加对象:

ls = []
ls.append(Temp('a', ['1a', '2q'], a).get())
ls.append(Temp('b', ['3b', '4m'], b).get())
ls.append(Temp('c', ['1a', '2q'], c).get())
ls.append(Temp('d', ['3b', '4m'], d).get())
ls.append(Temp('e', ['1a', '2q'], e).get())
ls.append(Temp('f', ['1a', '2q'], f).get())

输出:

ls

[<__main__.Temp at 0x7f5f52feffd0>,
 <__main__.Temp at 0x7f5f52fef9e8>,
 None,
 None,
 None,
 <__main__.Temp at 0x7f5f52fe5390>]

删除“无”:

while None in ls: ls.remove(None)

输出:

item_list:

[x.item_list for x in ls]
[['1a', '2q'], ['3b', '4m'], ['2g', '2q']]

键:

[x.key for x in ls]
['a', 'b', 'e']
© www.soinside.com 2019 - 2024. All rights reserved.