python - 如何一次循环两个列表列表并将一个列表中的值替换为另一个列表中的值?

标签 python list loops iteration nested-loops

我有两个列表列表(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...]

问题:我想同时迭代 ab - 对于 a 的每次迭代,如果 a [0]b[0]中,我想将对应的a[1]添加到b[1]中.

通俗地说,我想通过浏览我的 a 列表,检查姓名是否在 a 中,将年龄添加到我的 b 列表中code> 列表,如果是,则获取相应的年龄并将其添加到相应名称的 b 列表中。

我尝试了一个嵌套循环(迭代b,并且对于每次迭代,迭代a以检查aa[0]处是否有任何迭代 存在于 bb[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/

相关文章:

python - 如何在查询集中包含外键的详细信息字段(django 和rest_api)

python - 在 Mac OS 中,Pycharm 找不到 python 2.7.14

java - Java中的可循环音频

python - 如何在 Python 中遍历 defaultdict(list)?

python - 我正在流血图像,但它在一毫秒左右后消失

python - 检查一组值是否在给定数组内

python - 分割和剥离输出 python

css - 使用 CSS 的水平嵌套列表

r - 将相同顺序的矩阵列表转换为数组

c++ - 在下一个循环之前访问基于范围的 for 循环中的下一个元素