用另一个子列表替换子列表 - python
Replace sublist with another sublist - 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']]
子列表元素的数量可能会改变。唯一相同的是机器人 ID。所以我想搜索一下,看看机器人id是否在在线列表中,并将子列表替换为新的。
您可以创建一个字典,将新子列表中的 robot
ID 映射到实际的新子列表,然后在该字典中查找现有的 robot
ID 并进行相应替换。
>>> 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
也是一个将 robot
ID 映射到子列表的字典,则可以将其降低到 O(k),k 是新子列表的数量。
如果您还想添加从 NewSublists
到 Online
的元素(如果这些元素尚不存在),您应该绝对 转换 Online
dict
也是如此;那么你可以简单地 update
字典并得到 values
。如果顺序很重要,请确保使用 collections.OrderedDict
或 Python 3.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']]
我有一个列表:
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']]
子列表元素的数量可能会改变。唯一相同的是机器人 ID。所以我想搜索一下,看看机器人id是否在在线列表中,并将子列表替换为新的。
您可以创建一个字典,将新子列表中的 robot
ID 映射到实际的新子列表,然后在该字典中查找现有的 robot
ID 并进行相应替换。
>>> 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
也是一个将 robot
ID 映射到子列表的字典,则可以将其降低到 O(k),k 是新子列表的数量。
如果您还想添加从 NewSublists
到 Online
的元素(如果这些元素尚不存在),您应该绝对 转换 Online
dict
也是如此;那么你可以简单地 update
字典并得到 values
。如果顺序很重要,请确保使用 collections.OrderedDict
或 Python 3.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']]