为了账号安全,请及时绑定邮箱和手机立即绑定

检查元组数组中的匹配值 - python

检查元组数组中的匹配值 - python

江户川乱折腾 2023-07-11 10:36:29
好的,我有两个元组数组。我想检查数组二(在其子数组中)是否具有数组一中的匹配元素。如果是这样,我想将 True 或 False 值附加到Array One的元组中例如结果应该是:[ ('Rabbits', [('/home/white', 'white rabbits', False), ('/home/black', 'black rabbits', True), ('/home/green', 'green rabbits', True)]), ('Cats', [('/ans/pink', 'pink cats', True), ('/ans/purple', 'purple cats', False), ('/home/grey', 'grey cats', True)]), ('Hippos', [('/home/red', 'red hippo', False)])]阵列一[ ('Rabbits', [('/home/white', 'white rabbits'), ('/home/black', 'black rabbits'), ('/home/green', 'green rabbits')]), ('Cats', [('/ans/pink', 'pink cats'), ('/ans/purple', 'purple cats'), ('/home/grey', 'grey cats')], ('Hippos', ['/home/red', 'red hippo'])),  ]阵列二[ ('Rabbits', [('/home/black', 'black rabbits'), ('/home/green', 'green rabbits')]), ('Cats', [('/ans/pink', 'pink cats'), ('/home/grey', 'grey cats')]), ('Hippos', [])  ]当前尝试 1:(给定一个数组,每个元素将附加四次 3x false 和 1x True)def parse_selectedmenu(array_one, array_two):    # boolean flag used when rendering checkbox 'ticked' in template    selected = True    not_selected = False     index = 0    # array_one = list(array_one)    # array_two = list(array_two)    final_array = []    for array_one_name, default_items in array_one:        final_array.append([array_one_name])        # loop through the ticked "made available" items in post data        for array_two_name, custom_items in array_two:            # loop through default sub menu items in default menu            for default_item in default_items:                for custom_item in custom_items:                    # if a requested menu item exists in default sub menu                     if default_item[0] == custom_item[0] and default_item[1] == custom_item[1]:                        if len(default_item) <= 2:                            mylist = list(default_item)                            # append selcted against matched menu item in default menu items
查看完整描述

2 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

看来您在输入数据中使用括号时存在一些细微的不一致,我冒昧地纠正了这些不一致。完成此操作后,为了真正解决问题,我认为将第二个数组转换为字典以便于包含测试是有意义的。这给出:


from pprint import pprint


array_1 = [('Rabbits', [('/home/white', 'white rabbits'), 

                        ('/home/black', 'black rabbits'), 

                        ('/home/green', 'green rabbits')]), 

           ('Cats', [('/ans/pink', 'pink cats'),

                     ('/ans/purple', 'purple cats'),

                     ('/home/grey', 'grey cats')]), 

           ('Hippos', [('/home/red', 'red hippo')])] 



array_2 = [('Rabbits', [('/home/black', 'black rabbits'),

                        ('/home/green', 'green rabbits')]), 

           ('Cats', [('/ans/pink', 'pink cats'),

                     ('/home/grey', 'grey cats')]),

           ('Hippos', [])]


d = dict(array_2)


out = []

for species, tups in array_1:

    lst = []

    for tup in tups:

        if tup in d[species]:

            lst.append(tup + (True,))

        else:

            lst.append(tup + (False,))

    out.append((species, lst))


pprint(out)

输出:


[('Rabbits',

  [('/home/white', 'white rabbits', False),

   ('/home/black', 'black rabbits', True),

   ('/home/green', 'green rabbits', True)]),

 ('Cats',

  [('/ans/pink', 'pink cats', True),

   ('/ans/purple', 'purple cats', False),

   ('/home/grey', 'grey cats', True)]),

 ('Hippos', [('/home/red', 'red hippo', False)])]


查看完整回答
反对 回复 2023-07-11
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

第一个数组中有一些括号拼写错误,我已更正它们。


以下代码应该可以工作:


l1=[('Rabbits', [('/home/white', 'white rabbits'), ('/home/black', 'black rabbits'), ('/home/green', 'green rabbits')]), ('Cats', [('/ans/pink', 'pink cats'), ('/ans/purple', 'purple cats'), ('/home/grey', 'grey cats')]), ('Hippos', [('/home/red', 'red hippo')]), ]

l2=[('Rabbits', [('/home/black', 'black rabbits'), ('/home/green', 'green rabbits')]), ('Cats', [('/ans/pink', 'pink cats'), ('/home/grey', 'grey cats')]), ('Hippos', []) ]


m=[i[1][k] for i in l2 for k in range(len(i[1]))]

for i in range(len(l1)):

    for k in range(len(l1[i][1])):

        if l1[i][1][k] in m:

            l1[i][1][k]+=(True,)

        else:

            l1[i][1][k]+=(False,)

print(l1)


查看完整回答
反对 回复 2023-07-11
  • 2 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信