我正在尝试根据有效输出字典的键检查列表的连接内容。我想首先支持最长,最右边的比赛。作为视觉辅助,键输入字典的顺序是我希望输出更喜欢的顺序。
我觉得我差不多已经解决了问题,但是我已经搞砸了代码,因为我的大脑已经很长时间了。
编辑:septra提供了以下代码,它完成了我想要它做的90%
foo = ['1','2','3']
bar = ['1','2','2','3']
foobar = ['dog','horse']
foodbar = ['2','3','1']
valid_list = {'1 2 3':'1 2 3','2 3':'2 3','1 2':'1 2','3':'3','2':'2','1':'1'}
def validCheck(check, valid_list):
for r in range(len(check)):
key = " ".join(check[r:])
if key in valid_list:
return valid_list[key]
print(validCheck(foo, valid_list))
print(validCheck(bar, valid_list))
print(validCheck(foobar, valid_list))
print(validCheck(foodbar, valid_list))
打印
'1 2 3'
'2 3'
'None'
'1'
而不是
'1 2 3'
'2 3'
'None'
'2 3'
正如后面的评论中所说,理想情况下,它会捕获多个不重叠的有效输入,并且标准也相同,但我现在准备推迟使用该功能。在那种情况下,
validCheck(['2','3','1','2'], valid_list)
会打印
['1 2','2 3']
支持单个较长的输出而不是多个较短的输出。
答案 0 :(得分:0)
这是您正在寻找的功能吗?
def validCheck(check, valid_list):
all_keys = []
for r in range(len(check)):
key = " ".join(check[r:])
revkey = " ".join(check[-r:-1])
valid_key = []
valid_revkey = []
if key in valid_list:
valid_key.append(key)
if revkey in valid_list:
valid_revkey.append(revkey)
all_keys.extend(valid_key + valid_revkey)
return max(all_keys, key=len) if all_keys else None
这应该照顾最长的>对大多数要求。