タプルの2つのリスト(アイテム名、バージョン)があります.1つは現在のアイテムをすべて含み、もう1つはインポートするアイテムです。インポートされたアイテムと現在のアイテムの間に名前の衝突がある場合、新しいバージョンを返すことにします。私のソリューションは、次のとおりです。Python - タプルのリスト内のアイテムを比較する
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]
をチェックして、[1]単一でnは返すことができ、特にラインで、疑問に思って操作?
これが動作する場合に
""
をキャストタイプしようとしたときtry/except
は、例外をキャッチすると、あなたがそれを取る必要があり、コードや実装上のフィードバックを取得したいですコードレビュー – jacoblaw私はこのオプションを知らなかった、そこに私を転送していただきありがとうございます! – nuki