繁体   English   中英

通过比较另一个列表在列表中添加缺失值,反之亦然

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM