我有两个列表列表(a 和 b)
它们每行都只有 2 个索引。
a
(50,000 行)如下所示:
|name|age|
|----|---|
|Dany|021|
|Alex|035|
作为列表的列表,看起来像这样:
[['Dany', '021'],['Alex','035'], etc...]
b
(2000 行)如下所示:
|name|age|
|----|---|
|Paul| |
|Leon| |
作为列表的列表,看起来像这样:
[['Paul', ''],['Leon',''], etc...]
问题:我想同时迭代 a
和 b
- 对于 a
的每次迭代,如果 a [0]
在b[0]
中,我想将对应的a[1]
添加到b[1]
中.
通俗地说,我想通过浏览我的 a
列表,检查姓名是否在 a
中,将年龄添加到我的 b
列表中code> 列表,如果是,则获取相应的年龄并将其添加到相应名称的 b
列表中。
我尝试了一个嵌套循环(迭代b,并且对于每次迭代,迭代a
以检查a
在a[0]处是否有任何迭代
存在于 b
的 b[0]
的迭代中),但此后一直迷失方向。
for row in b[1:]: # Excluding the headers
b_name = row[0]
b_age = row[1]
for row in a[1:]:
if b_name in row[0]:
b_age = row[1]
else:
b_age = ''
问题是我最终只得到一个 b_age
值,但应该有 2000 个唯一的 b_age
值?
最佳答案
假设名称在a
中是唯一的,您可以从 a
创建一个字典以避免在替换 b
中的空字符串值时一遍又一遍地循环它。 。例如(在示例中添加了一些项目,以说明如果 b
中的名称在 a
中不存在会发生什么):
a = [['Dany', '021'], ['Alex','035'], ['Joe', '054']]
b = [['Alex',''], ['Dany', ''], ['Jane', '']]
d = {k: v for k, v in a}
b = [[k, d[k]] if k in d else [k, v] for k, v in b]
print(b)
# [['Alex', '035'], ['Dany', '021'], ['Jane', '']]
如果您实际使用的列表只是一个简单的对列表,如示例中所示,那么您可以将上面的字典理解替换为 dict(a)
.
此外,如果不清楚,各种 k, v
引用是为了方便解压嵌套对,但您可以只使用单个变量并使用索引值进行访问,例如:
{x[0]: x[1] for x in a}
关于python - 如何一次循环两个列表列表并将一个列表中的值替换为另一个列表中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55621905/