用另一个子列表替换子列表

2024-03-28 11:02:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个清单:

Online = [['Robot1', '23.9', 'None', '0'], ['Robot2', '25.9', 'None', '0']]

如果收到不同的值,我想替换子列表:

NewSublist1 =  ['Robot1', '30.9', 'Sending', '440']

NewSublist2 =  ['Robot2', '50']

我想要:

Online = [['Robot1', '30.9', 'Sending', '440'], ['Robot2', '50']]

子列表元素的数量可能会更改。唯一相同的是Robot id,所以我想进行搜索,看看Robot id是否在联机列表中,并用新的替换子列表。你知道吗


Tags: noneid元素列表数量robot联机online
1条回答
网友
1楼 · 发布于 2024-03-28 11:02:43

您可以创建一个字典,将新子列表中的robotid映射到实际的新子列表,然后在该dict中查找现有的robotid并相应地替换。你知道吗

>>> Online = [['Robot1', '23.9', 'None', '0'], ['Robot3', 'has no replacement'], ['Robot2', '25.9', 'None', '0']]
>>> NewSublists = [['Robot1', '30.9', 'Sending', '440'], ['Robot2', '50'], ['Robot4', 'new entry']]
>>> newsub_dict = {sub[0]: sub for sub in NewSublists}
>>> [newsub_dict.get(sub[0], sub) for sub in Online]
[['Robot1', '30.9', 'Sending', '440'],
 ['Robot3', 'has no replacement'],
 ['Robot2', '50']]

这将在列表中的每个元素上循环一次,使其复杂性为O(n),n是Online列表中的元素数。相反,如果您将Online也映射robotid到子列表的字典,您可以将其归结为O(k),k是新子列表的数目。你知道吗

如果您还想将元素从NewSublists添加到Online如果这些元素还没有出现,那么您应该明确地Online转换为dict;然后您可以简单地updatedict并获得values。Ir顺序很重要,请确保使用collections.OrderedDict或python3.7。你知道吗

>>> online_dict = {sub[0]: sub for sub in Online}
>>> online_dict.update(newsub_dict)
>>> list(online_dict.values())
[['Robot1', '30.9', 'Sending', '440'],
 ['Robot3', 'has no replacement'],
 ['Robot2', '50'],
 ['Robot4', 'new entry']]

相关问题 更多 >