我有一个元组列表:
my_list = [(a1, b1, c1), ... , (an, bn, cn)]
我也有一本字典:
my_dict = {x1: y1, ... , xm: ym}
我想创建一个函数来搜索my_list中my_dict中每个元组的第3个元素。如果元组的第3个元素在my_dict中,则将该元素替换为字典中的值,并将此更新的元组追加到新列表new_list。如果元组的第3个元素不在my_dict中,则将原始元组保持不变为new_list。
因此,例如,如果c在字典中具有值q,那么我想用q替换c:
(a,b,c)---> (a,b,q)
如果c不在dictonary中,我希望元组保持不变:
(a,b,c)---> (a,b,c)
我写了一个for循环,但不明白它为什么不工作:
def my_func(a,b):
y = []
for x in a:
if b.get(x[2]) == None:
y.append(x)
else:
y.append((x[0], x[1], b.get(x[2])))
return y
那么我的目标是评估my_func(my_list,my_dict)。但是,它只返回原始列表my_list而没有任何更改。我已尝试过其他几种形式,如"如果x [2]在my_dict"没有运气。
我非常感谢任何建议!
编辑:
列表和字典的一个例子是:
my_list = [ (‘string1_1’, 0.3, ‘string2_1’), (‘string1_2’, 0.5, ‘string2_2’), (‘string1_3’, 0.4, ‘string2_3’), (‘string1_4’, 0.65, ‘string2_4’)]
my_dict = {‘string2_1’: ‘string2_1_EDIT’, ‘string2_4’ : ‘string2_4_EDIT’}
答案 0 :(得分:3)
您可以将其简化为列表表达式:
[(x[0], x[1], b.get(x[2], x[2])) for x in a]
哪个应该有用 - 你能提供一些样本输入吗?
答案 1 :(得分:1)
为变量使用更有意义的名称确实很有用。
dicts的.get()
方法可以采用第二个参数,当找不到密钥时会返回该参数。
my_list = [("a1", "b1", "c1"), ("an", "bn", "cn")]
my_dict = {"c1": "present"}
def myfunc(lst, dct):
result = []
for a, b, c in lst:
el3 = dct.get(c, c)
result.append((a, b, el3))
return result
print myfunc(my_list, my_dict)
打印
[('a1', 'b1', 'present'), ('an', 'bn', 'cn')]
更紧凑的版本会读取
def myfunc(lst, dct):
return [(a, b, dct.get(c, c)) for (a, b, c) in lst]