Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python中另一个列表的值更新一个列表_Python_Python 3.x - Fatal编程技术网

用Python中另一个列表的值更新一个列表

用Python中另一个列表的值更新一个列表,python,python-3.x,Python,Python 3.x,我有一个包含用户数据的元组列表,如下所示(元组的第二个值是年龄) 我需要更新另一个列表中的年龄值,如下所示: l2 = [('uid1','24'),('uid2','37'),....] l2中的元组只有两个元素,l2的大小小于l1,但并非所有l2值都存在于l1中,因此只有l1中存在的值需要更新。如何创建一个新的列表l3,如下所示 l3 = [('uid1','24','F'),('uid2','37','M'),('uid3','25','M'),.....] 请建议如何进行这项工作 #

我有一个包含用户数据的元组列表,如下所示(元组的第二个值是年龄)

我需要更新另一个列表中的年龄值,如下所示:

l2 = [('uid1','24'),('uid2','37'),....]
l2中的元组只有两个元素,l2的大小小于l1,但并非所有l2值都存在于l1中,因此只有l1中存在的值需要更新。如何创建一个新的列表l3,如下所示

l3 = [('uid1','24','F'),('uid2','37','M'),('uid3','25','M'),.....]
请建议如何进行这项工作

#更新1 我尝试将l2转换为字典:

d = {x[0]:x[1] for x in l2}
然后呢,

l3 = [(x[0],d[x[0]],x[2]) for x in l1]
但是当在
d
中找不到相应的
d[x[0]]
时,它会抛出错误。如何避免这种情况并保留较旧的值?

要避免运行时出现
O(n^2)
(对于
l1
中的每个元组,检查它是否在
l2
中),最好使用字典将名称映射到年龄:

l2\u d=dict(l2)
现在更容易检查某个名字是否有替换年龄。我们迭代
l1
,并从
l2
中获取匹配年龄,如果
l2
中不存在匹配年龄,则获取原始年龄。然后简单地将元组添加到具有适当年龄的新列表中:

l3=[]
l1中的姓名、年龄、性别:
年龄=l2_d.get(姓名、年龄)
l3.附加((姓名、年龄、性别))
这也可以简化为列表理解,但可能处于可读性边界的边缘:

l3=[(姓名,l2_d.get(姓名,年龄,性别)表示l1中的姓名,年龄,性别]

以下各项应起作用:

d2={i[0]:i[1] for i in l2}

l3=[]

for i in l1:
    if i[0] in d2:
        l3.append((i[0], d2[i[0]], i[2]))
    else:
        l3.append(i)
为了

输出将是:

>>> print(l3)
[('uid1', '24', 'F'), ('uid2', '37', 'M'), ('uid3', '25', 'M')]

听起来你应该使用dicts而不是tuple…@Tomerikoo我试过了,我已经更新了原始的postCan,你能给出一个清晰的输入/输出示例吗?您是否需要
l3
更新
l1
中的所有值以及
l2
中的值,或者更新
l2
中的值以及
l1
中的值?@Tomerikoo l3应尽可能将所有元组作为l1包含,并从l2更新年龄值。如果l2没有在l1中存在的元组(userid),那么它将不会在l3中更新,并将按原样保留。
l1=[('uid1', '23', 'F'), ('uid2', '35', 'M'), ('uid3', '25', 'M')]
l2=[('uid1', '24'), ('uid2', '37')]
>>> print(l3)
[('uid1', '24', 'F'), ('uid2', '37', 'M'), ('uid3', '25', 'M')]