对于' b'中的每个元素我需要从' a'中找到它的价值。并将其放到结果列表中。如果没有相应的值存储在' a'我需要把无
示例:
getValues([("key1", "value1"), ("key2", "value2"), ("key3", "value3")], ["key2","key3","key3","key4","key1","key5"])
必须返回["value2", "value3", "value3", None, "value1", None]
如何修复代码,以便将其添加到必须的列表中?
def getValues(a, b):
result = []
for i in range(len(b)):
for n in range(len(a)):
if b[i] == a[n][0]:
result.append(a[n][1])
return result
无论我在哪里尝试添加无条件,它都无法正常工作。
答案 0 :(得分:2)
>>> [dict(a).get(el) for el in b]
['value2', 'value3', 'value3', None, 'value1', None]
答案 1 :(得分:2)
从您的代码开始,您需要做的是确定您是否在a
中找到了某些内容。找到匹配后,您可以从内部for循环break
。这样,您可以使用for..else
语法来确定您需要使用None
:
def getValues(a, b):
result = []
for i in range(len(b)):
for n in range(len(a)):
if b[i] == a[n][0]:
result.append(a[n][1])
break
else:
result.append(None)
return result
但是,a
中每个项目的b
循环都很昂贵。由于a
本质上是一个查找,因此您应该考虑将其转换为字典。由于a
是键/值元组的列表,因此非常简单;你只需要拨打dict(a)
。
之后,你可以删除内循环:
def getValues(a, b):
result = []
d = dict(a)
for i in range(len(b)):
if b[i] in d:
result.append(d[b[i]])
else:
result.append(None)
return result
除了检查项目是否在字典中之外,您还可以使用dict.get()
代替,如果密钥不在字典中,它将返回默认值。默认情况下,这是None
(方便),所以你可以这样做:
def getValues(a, b):
result = []
d = dict(a)
for i in range(len(b)):
result.append(d.get(b[i]))
return result
最后,不应迭代索引,而应迭代b
的列表项:
def getValues(a, b):
result = []
d = dict(a)
for x in b:
result.append(d.get(x))
return result
由于您为b
中的每个项目附加了一个项目,您还可以通过一个很好的列表理解来替换它:
def getValues(a, b):
d = dict(a)
return [d.get(x) for x in b]