Как я могу проверить, что в a.keys () существует «0,1,2», а если не существует, добавить «0,1,2»? - PullRequest
0 голосов
/ 19 ноября 2018

У меня возникли проблемы с этой проблемой.

a = {
    None: {0: None, 1: None},
    '1,2': {0: '0,1,2', 1: None}
}

Я хотел бы проверить, что значения a, являющиеся словарями, имеют значение, которое существует в a.keys(), если его нет, то добавьте его в качестве ключа со значением dict().

В этом случае None значения существуют в a.keys(), но '0,1,2' нет, поэтому я просто добавляю их к a.keys() и получаю что-то вроде этого.

a = {
    None: {0: None, 1: None},
    '1,2': {0: '0,1,2', 1: None},
    '0,1,2': {}
}

После некоторых других операций пустой словарь будет иметь некоторые ключи и значения.

Например,

a = {
    None: {0: None, 1: None},
    '1,2': {0: '0,1,2', 1: None},
    '0,1,2': {0: None, 1: '0,1'}
}

Теперь '0,1' не существует в a.keys(), поэтому я добавлю его.

Поэтому мне нужно снова и снова проверять, что a.values(), которые являются словарями, имеют свои значения в a.keys().

1 Ответ

0 голосов
/ 19 ноября 2018

Вы можете создать список всех пропущенных значений, просматривая все значения ваших «словарей значений», проверяя, не присутствуют ли они в качестве ключа в исходном словаре

def add_keys(d):
    missing_values = [v for vdict in d.values() for v in vdict.values() if v not in d]
    for k in missing_values:
        d[k] = {}

Обратите внимание, что генерация missing_values занимает время, пропорциональное общему количеству значений, присутствующих во всех «словарях значений» d:

Так что теперь, если вы звоните add_keys на a в любое время, он должен обновить a с отсутствующими ключами:

a = {None: {0: None, 1: None},
    '1,2': {0: '0,1,2', 1: None}}

add_keys(a)
print(a)
# {'1,2': {0: '0,1,2', 1: None}, '0,1,2': {}, None: {0: None, 1: None}}

a = {None: {0: None, 1: None},
    '1,2': {0: '0,1,2', 1: None},
    '0,1,2': {0: None, 1: '0,1'}}

add_keys(a)
print(a)
# {'1,2': {0: '0,1,2', 1: None}, '0,1': {}, '0,1,2': {0: None, 1: '0,1'}, None: {0: None, 1: None}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...