Вы сказали, что называете его
matches = [myresults for myresults in dict_matcher(dict1, dict2 , 2, 6)]
Вы должны называть его
matches = list(dict_matcher(dict1, dict2 , 2, 6))
, а его подпись
def dict_matcher(dict1, dict2, item1_pos, item2_pos, *args):
Итак 4аргументы переданы, и 4 названы аргументы.Таким образом, *args
приводит к args = None
.
Я не уверен, что именно вы хотите, но если вы сделаете
yield dict1[item1][item1_pos], dict2[item2][item2_pos]
Вы получите то же самое, что и отделать
yield dict1[item1][2], dict2[item2][6]
Если вы хотите получить все соответствующие элементы, выполните
yield dict1[item1], dict2[item2]
Если вы хотите получить по одному элементу от каждого, но не от соответствующего элемента, выполните
def dict_matcher(dict1, dict2, item1_pos, item2_pos, other1_pos, other2_pos):
и
yield dict1[item1][other1_pos], dict2[item2][other2_pos]
и
matches = list(dict_matcher(dict1, dict2 , 2, 6, 3, 8))
или что угодно вместо 3 и 8.
Если вы хотите получить несколько, но не всепредметы, делайте
def dict_matcher(dict1, dict2, item1_pos, item2_pos, other1_poss, other2_poss):
и
yield [dict1[item1][i] for i in other1_poss], [dict2[item2][i] for i in other2_poss]
и
matches = list(dict_matcher(dict1, dict2 , 2, 6, (2, 3), (6, 8)))
или что угодно вместо [2, 3] и [3, 8].
Если вы не это имели в виду, дайте мне знать.