[英]Add missing values in the list by comparing the other list and vice versa
我试图通过比较另一个列表将缺失值添加到列表中。 如果数据不存在于 list_2 中的 list_1 中,则在 list_2 的同一索引中,我们必须在 list_1 中添加“Missing”
list_1 = [('state', 'YES', 'varchar'), ('quantity', 'YES', 'int')]
list_2 = [('name', 'NO', 'varchar'), ('marks', 'YES', 'varchar'), ('state', 'YES', 'int')]
列表的预期输出是
list_1 = [("missing",),("missing",),('state', 'YES', 'varchar'), ('quantity', 'YES', 'int'))]
list_2 = [('name', 'NO', 'varchar'), ('marks', 'YES', 'varchar'), ('state', 'YES', 'int'),("missing",)]
我已经尝试了以下,但它不工作。
new_list1 = set(list1).difference(list2)
new_list2 = set(list2.difference(list1)
for i in new_list1:
for x in range(len(list_2)):
if list_2[x][0] == i:
list_1.insert(x, ("missing",))
for i in new_list2:
for x in range(len(list_1)):
if list_1[x][0] == i:
list_2.insert(x, ("missing",))
有人帮助解决这个问题
我没有使用您的元组结构完成此操作,但总体思路应该是相同的。
list1 = [1,2,3]
list2 = [0,1,7, 2,3]
new = []
for i in range(len(list2)):
new += ["missing"]
if list2[i] in list1:
new[i] = list2[i]
list1 = new
print(list1)
从你的两个列表中推断出所有键的总排序是不可能的,而且从你的评论中,顺序并不重要。 因此,使用字典会更容易,将键(用于确定相等性的元组的第一个元素)映射到实际的元组。
>>> d1 = {a: (a,b,c) for a,b,c in list_1}
>>> d2 = {a: (a,b,c) for a,b,c in list_2}
然后,您可以轻松地从两个(或任意数量的)字典中获取所有键,并使用字典理解来获得具有“缺失”值的最终字典。
>>> all_keys = set(d1) | set(d2)
>>> {k: d1.get(k, "missing") for k in all_keys}
{'quantity': ('quantity', 'YES', 'int'),
'marks': 'missing',
'name': 'missing',
'state': ('state', 'YES', 'varchar')}
与 list_2 list_2
。 当然,您也可以使用列表推导式。 更难知道哪些项目丢失了,但相应的项目将位于相同的位置,尽管不一定与原始列表中的(相对)位置相同。
>>> [d1.get(k, "missing") for k in all_keys]
[('quantity', 'YES', 'int'), 'missing', 'missing', ('state', 'YES', 'varchar')]
>>> [d2.get(k, "missing") for k in all_keys]
['missing', ('marks', 'YES', 'varchar'), ('name', 'NO', 'varchar'), ('state', 'YES', 'int')]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.