Как условно добавить кортежи из одного списка в другой список кортежей? - PullRequest
0 голосов
/ 19 января 2019

У меня есть два списка кортежей.

lst1 = [('Debt collection', 5572),
        ('Mortgage', 4483),
        ('Credit reporting', 3230),
        ('Checking or savings account', 2068),
        ('Student loan', 431)]

lst2 = [('Consumer Loan', 480),
        ('Student loan', 1632),
        ('Medical loan', 1632),
        ('Vehicle loan or lease', 377),
        ('Money transfer, virtual currency, or money service', 248),
        ('Payday loan, title loan, or personal loan', 245),
        ('Prepaid card', 83)]

Чего я хочу добиться, так это. Если первая часть кортежа (сбор долгов, ипотека и т. Д.) Существует в lst2, но не в lst1, я хочу добавить новый кортеж к lst1 в формате

(non-existent tuple, 0)

Так что в идеале я хочу, чтобы lst1 выглядел так:

lst1 = [('Debt collection', 5572),
        ('Mortgage', 4483),
        ('Credit reporting', 3230),
        ('Checking or savings account', 2068),
        ('Student loan', 431),
        ('Consumer Loan', 0),
        ('Medical Loan', 0),
        ('Vehicle loan or lease', 0),
        ('Money transfer, virtual currency, or money service', 0),
        ('Payday loan, title loan, or personal loan', 0),
        ('Prepaid card', 0)]

Я думал, что самым простым способом добиться этого было бы понимание списка, где я добавляю результат к lst1.

Понимание списка:

lst1.append((tpl[0],0) for tpl in \
lst1 for tpl1 in lst2 if tpl1[0] not in tpl)

Однако, когда я смотрю на результаты, я получаю следующее:

[('Debt collection', 5572),
 ('Mortgage', 4483),
 ('Credit reporting', 3230),
 ('Checking or savings account', 2068),
 ('Student loan', 431),
 <generator object <genexpr> at 0x12bc68780>]

Как бы мне было превратить объект генератора в нечто, что я действительно могу видеть при печати lst1? Возможно ли здесь то, чего я хочу достичь?

1 Ответ

0 голосов
/ 19 января 2019

Вам нужно извлечь из объекта генератора и использовать extend. Кроме того, порядок зацикливания в вашем понимании списка неверен и приведет к неверному выводу, даже если вы извлекли.

lst1 = [('Debt collection', 5572),
        ('Mortgage', 4483),
        ('Credit reporting', 3230),
        ('Checking or savings account', 2068),
        ('Student loan', 431)]

lst2 = [('Consumer Loan', 480),
        ('Student loan', 1632),
        ('Medical loan', 1632),
        ('Vehicle loan or lease', 377),
        ('Money transfer, virtual currency, or money service', 248),
        ('Payday loan, title loan, or personal loan', 245),
        ('Prepaid card', 83)]

available = [tpl[0] for tpl in lst1]
lst1.extend(tuple((tpl1[0], 0) for tpl1 in lst2 if tpl1[0] not in available))

print(lst1)
...