我有两个元组列表(项目名称,版本)-一个包含所有当前项目,另一个包含要导入的项目。如果导入的项目和当前项目之间存在名称冲突,我希望返回较新的版本。我的解决方案是:
currentItemVersion = [("ItemA", "001"), ("ItemB", "002"), ("Camera", ""), ("SHD_metal", "001"), ("SHD_wood", "002")]
importItemVersion = [("ItemB", "001"), ("Camera", "001"), ("SHD_metal", "002"), ("SHD_wood", "004")]
def updateItems(currentItems, importItems):
updatedItems = []
for i, v in currentItemVersion:
if i in [n[0] for n in importItemVersion]:
ni, nv = importItemVersion[[n[0] for n in importItemVersion].index(i)]
nvInt = int(nv) if nv else -1
vInt = int(v) if v else -1
if nvInt > vInt:
updatedItems.append((ni, nv))
elif nvInt == vInt:
updatedItems.append((ni, nv))
else:
updatedItems.append((i, v))
else:
print('item {0} was not imported'.format(i))
updatedItems.append((i, v))
return updatedItems
print(updateItems(currentItemVersion, importItemVersion))
我想知道是否有更好的解决方案,特别是在第7行和第8行。我能查一下吗
if i in [n[0] for n in list]
在一次操作中返回n[1]?你知道吗
改用dict,这样您就不需要找到与内部循环冲突的键,并将复杂性从O(m*n)降低到O(m)。你知道吗
您可以使用dict并逐个更新项目,同时检查dict中已有的版本(如果可用),例如:
输出:
dict.get(item, 0)
如果项是有效键,则返回version;如果不是,则返回0
。 在比较之前,您可能需要将转换版本键入int()
。你知道吗编辑:
添加了
int()
type cast+try/except
以在尝试将""
类型转换为int()
时捕获异常相关问题 更多 >
编程相关推荐