用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')]