Я хочу сравнить значения из двух переменных (словарь и список). Словарь имеет вложенную конструкцию, поэтому мне нужно перебрать все элементы. Я обнаружил простое решение, но я уверен, что могу сделать это лучше (используя python). Вкратце я хочу найти предметы от user_from_database
, которые не существуют в переменной user_from_client
.Сравнение значения из вложенных словарей и списка
Мое решение:
#variable containing users from client side
users_from_client = {
"0": {
"COL1": "whatever",
"COL2": "val1",
"COL3": "whatever",
},
"1": {
"COL1": "whatever",
"COL2": "val2",
"COL3": "whatever",
},
"3": {
"COL1": "whatever",
"COL2": "val3",
"COL3": "whatever",
}
}
#variable containing users from the database
users_from_database = [
["val1"],
["val2"],
["val5"],
["val7"]
]
#This function is used to find element from the nested dictionaries(d)
def _check(element, d, pattern = 'COL2'):
exist = False
for k, user in d.iteritems():
for key, item in user.iteritems():
if key == pattern and item == element:
exist = True
return exist
#Finding which users should be removed from the database
to_remove = []
for user in users_from_db:
if not _check(user[0], users_from_agent):
if user[0] not in to_remove:
to_remove.append(user[0])
#to_remove list contains: [val5, val7"]
Что такое лучший способ дать тот же результат, используя питона подход? Возможно, мне не нужно добавлять, что я новичок с python (я предполагаю, что вы можете видеть, что смотрите код выше).
Почему вы включаете каждый «val» в собственный список в 'users_from_database'? –