【发布时间】:2022-11-15 20:13:11
【问题描述】:
我试图找到一种有效的方法来合并两个具有不同结构的 python 对象(类)列表,并将它们合并到一个新的新对象列表中。编码:
from datetime import datetime
class StructureOne(object):
def __init__(self, date_time: datetime, name: str):
self.date_time: datetime = date_time
self.name: str = name
self.value = None
def set_value(self,value:float):
self.value = value
class StructureTwo(object):
def __init__(self, date_time: datetime, value: float):
self.date_time = date_time
self.value: float = value
def merge_lists(list_one: list[StructureOne], list_two: list[StructureTwo]) -> list[StructureOne]:
for element_one in list_one:
i = 0
while i < len(list_two) and element_one.value is not None:
if element_one.date_time == list_two[i].date_time:
element_one.set_value(value=list_two[i].value)
i += 1
return list_one
list_one: list[StructureOne] = [
StructureOne(date_time=datetime(2022, 1, 1, 0), name='zero'),
StructureOne(date_time=datetime(2022, 1, 1, 1), name='one'),
StructureOne(date_time=datetime(2022, 1, 1, 2), name='two'),
StructureOne(date_time=datetime(2022, 1, 1, 3), name='three'),
]
list_two: list[StructureTwo] = [
StructureTwo(date_time=datetime(2022, 1, 1, 0), value=0),
StructureTwo(date_time=datetime(2022, 1, 1, 1), value=1),
StructureTwo(date_time=datetime(2022, 1, 1, 2), value=2),
StructureTwo(date_time=datetime(2022, 1, 1, 3), value=3),
]
merged_list: list[StructureOne] = merge_lists(list_one=list_one, list_two=list_two)
期望的结果是
list_one: list[StructureOne] = [
StructureOne(date_time=datetime(2022, 1, 1, 0), name='zero', value=0),
StructureOne(date_time=datetime(2022, 1, 1, 1), name='one', value=1),
StructureOne(date_time=datetime(2022, 1, 1, 2), name='two', value=2),
StructureOne(date_time=datetime(2022, 1, 1, 3), name='three', value=3),
]
我们试图不使用像py-linq 这样的外部库。
【问题讨论】:
-
merge_lists方法的当前实现只是返回list_one,作为你的集合value = None,并且永远不会改变它的值。 -
你想要的输出是什么?你打算如何解决日期不匹配的问题?您只对将
list_two中的value添加到list_one中的元素感兴趣?
标签: python