我基本上想在Python中做一个Index-Match(思考Excel)类型公式,用tuple_list1中的等价值替换tuple_list中的None。
我的代码:
tuple_list = [("pineapple", 5), ("cherry", 7), ("kumquat", None), ("plum", None)]
tuple_list1 = [("orange, 10"),("plum", 10),("kumquat", 23)]
for item in tuple_list:
if item[1] == None:
item[1] = tuple_list[tuple_list1.index(item[0])][1]
print tuple_list
我的错误:
ValueError: 'kumquat' is not in list
期望的输出:
[("pineapple", 5), ("cherry", 7), ("kumquat", 23), ("plum", 10)]
答案 0 :(得分:1)
您可能应该使用字典,但如果您需要使用此数据格式,则需要过滤tuple_list1
以获取所需的数据。
tuple_list = [("pineapple", 5), ("cherry", 7), ("kumquat", None), ("plum", None)]
tuple_list1 = [("orange", 10),("plum", 10),("kumquat", 23)]
for key, item in enumerate(tuple_list):
if item[1] == None:
tuple_list[key] = (item[0], [x for x in tuple_list1 if x[0] == item[0]][0][1])
print tuple_list
答案 1 :(得分:0)
你的tuple_list和tuple_list1被颠倒了。断线应该是:
tuple_list1[tuple_list.index(item)][1]
也不应该在项目上使用[0],你不是在寻找元组的一个组件,而是在寻找整个元组的索引
另一个问题是你无法修改元组的元素。他们是不可改变的。您必须创建一个新元组并替换旧元组
这里有一些代码可以执行您希望它执行的操作:
tuple_list = [("pineapple", 5), ("cherry", 7), ("kumquat", None), ("plum", None)]
tuple_list1 = [("orange, 10"),("plum", 10),("kumquat", 23)]
for item in tuple_list:
if item[1] == None:
ind = tuple_list.index(item)
ind2 = [i for i in range(len(tuple_list1)) if tuple_list1[i][0] == item[0]][0]
tuple_list[ind] = (item[0], tuple_list1[ind2][1])
print tuple_list
答案 2 :(得分:0)
您可以遍历tuple_list
和tuple_list1
并过滤掉一个新列表,其中所有元组具有相同的值,索引为0 in,就在那里。然后在新列表中替换它,该列表仍在迭代直到完成。
继承我的洗礼。这会创建一个新列表。
tuple_list = [("pineapple", 5), ("cherry", 7), ("kumquat", None), ("plum", None)]
tuple_list1 = [("orange", 10),("plum", 10),("kumquat", 23)]
tuple_list = [(v1[0], [v2 for v2 in tuple_list1 if v2[0] == v1[0]][0][1]) if v1[1] == None else v1 for v1 in tuple_list]
print tuple_list