Обновить словарь при условии - PullRequest
0 голосов
/ 08 апреля 2019

Я работаю над кодом, в котором задан словарь словарей, который выглядит следующим образом:

D = {1: {2: 'a', 3: 'b'}, 10: {11: 'a', 12: 'b'}}

, где 1 и 2 - ключи, а внутренние словари {2: 'a', 3: 'b'} и {11: 'a', 12: 'b'} являются результатами после применения сложения 1 или 2. D [1] + 1 = 2 и D [1] + 2 = 3. 'a' и 'b'обозначает добавление к 1 или 2 соответственно.

От D Я бы хотел продолжать применять эти дополнения к его новым продуктам, которые я могу получить, выполнив следующие действия:

products = list(set([l for x, y in D.items() for l, m in y.items()]))

products = [2,3,11,12]

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

Таким образом, применение дополнений к каждому элементу в продукте и добавление их в D приведёт к чему-то вроде этого:

D = {1: {2: 'a', 3: 'b'}, 10: {11: 'a', 12: 'b'}, 2: {3: 'a', 4: 'b'}, 3: {4: 'a', 5: 'b'}, 11: {12: 'a', 13: 'b'}, 12: {13: 'a', 14: 'b'}}

Обратите внимание на новые ключи и их новый внутреннийсловари (продукты)

Дело в том, что я хотел бы продолжать делать это с новыми продуктами в цикле while, пока не будет достигнуто число.

Например, для следующей итерации продукты будут:

products = [3,4,5,12,13,14]

Их следует использовать для применения дополнений, если они не в D, так что это легко сделать с помощью:

for i in products:
    if i in D:
        products.remove(i)

, что приведет нас к:

products = [4,5,13,14] # 3 and 12 are already on D

Таким образом, мы должны применить дополнение к этим продуктам и добавить их к D

Так что я предполагаю, что для достижения этого должно быть что-то вроде:

D = {1: {2: 'a', 3: 'b'}, 10: {11: 'a', 12: 'b'}}
i = 0
while i < 4: # just an example of 4 number of iterations
    products = list(set([l for x, y in D.items() for l, m in y.items()]))
    for j in products:
        if j in D:
            products.remove(j)
    # apply additions
    # update D or use an auxiliary dict and them append to D



    i +=1

1 Ответ

0 голосов
/ 08 апреля 2019

Там только одна переменная i.

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

...