python - 检查元组数组中的匹配值 - python
问题描述
好的,我有两个元组数组。我想检查数组二(在其子数组中)是否具有数组一中的匹配元素。如果是这样,我想将 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
mylist.append(selected)
default_item_x = tuple(mylist)
default_item = default_item_x
final_array[index].append(default_item)
# print("\n====<<<<<<< ( new 1) SELECTED: item " + str(default_item))
else:
mylist = list(default_item)
# append selcted against matched menu item in default menu items
mylist[2] = selected
default_item_x = tuple(mylist)
default_item = default_item_x
final_array[index].append(default_item)
# print("\n====<<<<<<< (old 2) SELECTED: item " + str(default_item))
if len(default_item) <= 2:
mylist = list(default_item)
# append selcted against matched menu item in default menu items
mylist.append(selected)
default_item_x = tuple(mylist)
default_item = default_item_x
final_array[index].append(default_item)
# print("\n====<<<<<<< ( new 1) SELECTED: item " + str(default_item))
else:
mylist = list(default_item)
# append selcted against matched menu item in default menu items
mylist[2] = selected
default_item_x = tuple(mylist)
default_item = default_item_x
final_array[index].append(default_item)
# print("\n====<<<<<<< (old 2) SELECTED: item " + str(default_item))
index+=1
print("\n====<<<<<<< matched: item " + str(final_array))
return final_array
尝试二:(简化但类似的逻辑)。打印相同的元组四次,附加随机真或假
def parse_menuitem(array_two, array_one):
selected = True
not_selected = False
array_two_list = list(array_two)
array_one_list = list(array_one)
final_array = []
for d_item in def_menu_list[1]:
for c_item in custom_menu_list[1]:
l_d_item = list(d_item)
if d_item[0] == c_item[0] and d_item[1] == d_item[1]:
final_array.append((d_item[0], d_item[1], selected))
else:
final_array.append((d_item[0], d_item[1], not_selected))
print("\n\n----->>> items in menu: " + str(final_array))
def parse_selectedmenu(custom_menus, default_menus):
parsed_menus = []
for d_menu in default_menus:
for c_menu in custom_menus:
m = parse_menuitem(c_menu, d_menu)
parsed_menus.append(m)
解决方案
看起来您在输入数据中使用括号时存在一些细微的不一致,我冒昧地更正了这些。完成此操作后,要实际解决问题,我认为将第二个数组转换为字典以便于包含测试是有意义的。这给出了:
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)])]
推荐阅读
- c# - 插入给出“无法将参数值从字符串转换为字节”错误
- python - matplotlib.pyplot 创建线图后无法创建箱线图
- java - 如何设置增量进度并在按下按钮时更新进度条?
- c++ - “'SomeFuction'的多重定义”。不知道如何修复
- react-native - 如何更改平面列表可选项目的颜色
- python - 在张量中分配行会引发“不支持无值”
- java - 如何将 FLUSHDB ASYNC 与 RedisTemplate 一起使用?
- android - 为安卓游戏创建游戏邀请码
- django - Django:如何使用 Django ORM 实现 JOIN?
- wordpress - 如何禁用插入块按钮并且不允许在“InnerBlocks”中添加任何块