如何在没有匹配索引的情况下更新列表值
how to update a list value, without matching index
您好,我正在尝试更新订单号及其时间列表。例如,我有四个如下所示的列表
OrderNum1 = ['1','6','3']
originaltime = ['12AM','5AM','7AM']
OrderNum2 = ['1','3']
newtime = ['2AM','2AM']
目标是将 'originaltime' 的值替换为 'newtime' if/when 的值,订单号匹配。
我以前用过这个
for i,(a,b) in enumerate(zip(OrderNum1,OrderNum2)):
if a == b:
originaltime[i] = newtime[i]
但是不会更新ordernum 3的时间,因为索引不匹配。期望的结果是:
print(originaltime)
['2AM', '5AM', '2AM']
你很接近!看看这个:
trans = {k: v for k, v in zip(OrderNum2, newtime)}
originaltime = [trans.get(k, item) for k, item in zip(OrderNum1, originaltime)]
print(originaltime) # -> ['2AM', '5AM', '2AM']
试试这个:
for i in OrderNum2:
pos2 = OrderNum2.index(i)
for j in OrderNum1:
pos1 = OderNum1.index(j)
if i == j:
originaltime[pos1] = newtime[pos2]
你可以试试
originaltime = [originaltime[i] if v not in OrderNum2 else newtime[OrderNum2.index(v)] for i, v in enumerate(OrderNum1)]
print(originaltime)
输出
['2AM', '5AM', '2AM']
您可以使用这个 for 循环来填补空白:
OrderNum1 = ['1','6','3']
originaltime = ['12AM','5AM','7AM']
OrderNum2 = ['1','3']
newtime = ['2AM','2AM']
for i,(a,b) in enumerate(zip(OrderNum1,OrderNum2)):
if a != b:
OrderNum2.insert(i,' ')
newtime.insert(i,' ')
else:
originaltime[i] = newtime[i]
print(originaltime)
输出:
['2AM', '5AM', '2AM']
我一直很喜欢列表操作问题!有很多方法可以解决此问题,但我会尝试提供与您的尝试类似的解决方案。
OrderNum1 = ['1','6','3']
originaltime = ['12AM','5AM','7AM']
OrderNum2 = ['1','3']
newtime = ['2AM','2AM']
for i, val in enumerate(OrderNum2):
if val in OrderNum1:
originaltime[int(val) - 1] = newtime[i]
print(originaltime)
您可以构建一个 OrderNum2-to-newtime dict()
以在订单号匹配时查找替换值,如果不匹配则使用原始时间:
OrderNum1 = ['1', '6', '3']
originaltime = ['12AM', '5AM', '7AM']
OrderNum2 = ['1', '3']
newtime = ['2AM', '2AM']
new_times = dict(zip(OrderNum2, newtime))
originaltime = [new_times.get(order_num, org_time) for order_num, org_time in zip(OrderNum1, originaltime)]
print(originaltime)
输出:
['2AM', '5AM', '2AM']
我尽量用字典写出同样的答案:
dict2 = dict() # create a dictionary
for i in range(len(OrderNum2)):
dict2[OrderNum2[i]] = newtime[i]
# your dictionary created
for j in range(len(OrderNum1)):
if dict2.get(OrderNum1[j]):
originaltime[j] = dict2.get(OrderNum1[j])
print(originaltime)
您好,我正在尝试更新订单号及其时间列表。例如,我有四个如下所示的列表
OrderNum1 = ['1','6','3']
originaltime = ['12AM','5AM','7AM']
OrderNum2 = ['1','3']
newtime = ['2AM','2AM']
目标是将 'originaltime' 的值替换为 'newtime' if/when 的值,订单号匹配。
我以前用过这个
for i,(a,b) in enumerate(zip(OrderNum1,OrderNum2)):
if a == b:
originaltime[i] = newtime[i]
但是不会更新ordernum 3的时间,因为索引不匹配。期望的结果是:
print(originaltime)
['2AM', '5AM', '2AM']
你很接近!看看这个:
trans = {k: v for k, v in zip(OrderNum2, newtime)}
originaltime = [trans.get(k, item) for k, item in zip(OrderNum1, originaltime)]
print(originaltime) # -> ['2AM', '5AM', '2AM']
试试这个:
for i in OrderNum2:
pos2 = OrderNum2.index(i)
for j in OrderNum1:
pos1 = OderNum1.index(j)
if i == j:
originaltime[pos1] = newtime[pos2]
你可以试试
originaltime = [originaltime[i] if v not in OrderNum2 else newtime[OrderNum2.index(v)] for i, v in enumerate(OrderNum1)]
print(originaltime)
输出
['2AM', '5AM', '2AM']
您可以使用这个 for 循环来填补空白:
OrderNum1 = ['1','6','3']
originaltime = ['12AM','5AM','7AM']
OrderNum2 = ['1','3']
newtime = ['2AM','2AM']
for i,(a,b) in enumerate(zip(OrderNum1,OrderNum2)):
if a != b:
OrderNum2.insert(i,' ')
newtime.insert(i,' ')
else:
originaltime[i] = newtime[i]
print(originaltime)
输出:
['2AM', '5AM', '2AM']
我一直很喜欢列表操作问题!有很多方法可以解决此问题,但我会尝试提供与您的尝试类似的解决方案。
OrderNum1 = ['1','6','3']
originaltime = ['12AM','5AM','7AM']
OrderNum2 = ['1','3']
newtime = ['2AM','2AM']
for i, val in enumerate(OrderNum2):
if val in OrderNum1:
originaltime[int(val) - 1] = newtime[i]
print(originaltime)
您可以构建一个 OrderNum2-to-newtime dict()
以在订单号匹配时查找替换值,如果不匹配则使用原始时间:
OrderNum1 = ['1', '6', '3']
originaltime = ['12AM', '5AM', '7AM']
OrderNum2 = ['1', '3']
newtime = ['2AM', '2AM']
new_times = dict(zip(OrderNum2, newtime))
originaltime = [new_times.get(order_num, org_time) for order_num, org_time in zip(OrderNum1, originaltime)]
print(originaltime)
输出:
['2AM', '5AM', '2AM']
我尽量用字典写出同样的答案:
dict2 = dict() # create a dictionary
for i in range(len(OrderNum2)):
dict2[OrderNum2[i]] = newtime[i]
# your dictionary created
for j in range(len(OrderNum1)):
if dict2.get(OrderNum1[j]):
originaltime[j] = dict2.get(OrderNum1[j])
print(originaltime)