我有一个包含名称,位置和点数的列表,然后有一个新的列表,我设法从游戏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)
所以我需要的是将新列表更新到主列表,如您所见,对于给定的名称 - 位置对,分数在新列表中更改。
我希望原始列表能够反映更新的分数。我怎么能这样做?
答案 0 :(得分:3)
一个基本假设是,在您的用例中,lst
(不要使用list
命名您的对象)肯定比newlist
大得多,而不是全部条目可能会更新(或者您可能刚刚完成lst = newlist
)。
这里的另一个假设是元组中的前两个元素形成"键",最后一个元素形成"值"每个条目。我们将此设置用于我们的解决方案。
蛮力解决方案将涉及嵌套循环并以二次方式运行。您可以使用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()]
print(lst_updated)
[('Charlie', '3', '2300'), ('Bill', '2', '2350'), ('Alan', '1', '2400')]