基于另一个lis更新列表中的项目

2024-04-25 14:55:05 发布

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

我有一个列表,其中包含名称、位置和点数,然后有一个新列表,我设法从游戏api中获取数据,循环它并在之后添加它,它将清空新列表并刷新重复(在我的示例中,我不会放api循环代码,而是将我得到的数据类型放在一起以使其更简单)

list = [
        ['Charlie', '3', '2000'],
        ['Bill', '2', '2100'],
        ['Alan', '1', '2200']
        ]

newlist = [
        ['Charlie', '3', '2300'],
        ['Bill', '2', '2350'],
        ['Alan', '1', '2400']
        ]

#doesn't work as mentioned previously  
list.append(updatedlist)

print(list)

所以我只需要将新列表更新到主列表中,正如您所看到的,对于给定的名称位置对,新列表中的分数会发生变化。在

我希望原始列表能反映最新的分数。我该怎么做?在


Tags: 代码名称api游戏示例列表分数清空
1条回答
网友
1楼 · 发布于 2024-04-25 14:55:05

一个基本的假设是,在您的用例中,lst(不要使用list来命名对象)肯定比newlist大得多,而且并不是所有的条目都要更新(或者您可以刚刚完成lst = newlist)。在

这里的另一个假设是元组中的前两个元素构成“key”,最后一个元素形成每个条目的“value”。我们将在解决方案中使用此设置。在

一个强力解决方案将涉及一个嵌套循环,并在二次时间内运行。您可以散列数据并将其简化为线性操作,使用OrderedDict来维持顺序。在

让字典帮你处理更新。在

from collections import OrderedDict

# initialise an ordered dictionary from your existing data
o = OrderedDict((v[:-1], v[-1]) for v in lst)
# initialise an ordered dictionary from your new data
o_new = OrderedDict((v[:-1], v[-1]) for v in newlist)
# update current entries with new/updated entries 
o.update(o_new)

lst_updated = [k + (v, ) for k, v in o.items()]

^{pr2}$

相关问题 更多 >