У меня есть два списка, содержащие словари.Я хочу сравнить определенные поля в каждом из этих словарей.
current_list = [{"name": "Bill","address": "Home", "age": 23, "accesstime":11:14:01},
{"name": "Fred","address": "Home", "age": 26, "accesstime":11:57:43},
{"name": "Nora","address": "Home", "age": 33, "accesstime":11:24:14}]
backup_list = [{"name": "Bill","address": "Home", "age": 23, "accesstime":13:34:24},
{"name": "Fred","address": "Home", "age": 26, "accesstime":13:34:26},
{"name": "Nora","address": "Home", "age": 33, "accesstime":13:35:14}]
Список / словари должны быть одинаковыми по порядку, и я просто хочу сравнить определенные пары ключ-значение.Как имя, адрес, возраст и время игнорирования, но то, что у меня есть, сравнивает каждый ключ / пару.Поэтому я просто хочу сравнить
current_list:dictionary[0][name] -> backup_list:dictionary[0][name] and then
current_list:dictionary[0][address] -> backup_list:dictionary[0][address]
и так далее.
for x in current_list:
for y in backup_list:
for k, v in x.items():
for kk, vv in y.items():
if k == kk:
print("Match: {0}".format(kk))
break
elif k != kk:
print("No match: {0}".format(kk))
Текущий вывод
Match name with name
No Match address with name
Match address with address
No Match age with name
No Match age with address
Match age with age
No Match dateRegistered with name
No Match dateRegistered with address
No Match dateRegistered with age
Match dateRegistered with dateRegistered
Предпочтительный вывод
Match name with name
Match address with address
Match age with age
* Из-за изменения требования мой список стал списком элементов Elementtree xml *
Таким образом, вместо приведенного выше списка он становится
backup_list = ["<Element 'New' at 0x0000000002698C28>, <Element 'Update' at 0x0000000002698CC8>, <Element 'New' at 0x0000000002698CC8>"]
, где ElementTree - это элемент xml, содержащий:
{"name": "Nora", "address": "Home", "age": 33, "dateRegistered": 20140812}"
Так что это основано наответ ниже, кажется, удовлетворяет моим требованиям:
value_to_compare = ["name", "address", "age"]
for i, elem in enumerate(current_list):
backup_dict = backup_list[i]
if elem.tag == "New":
for key in value_to_compare:
try:
print("Match {0} {1} == {2}:".format(key, backup_dict.attrib[key], elem.attrib[key]))
except KeyError:
print("key {} not found".format(key))
except:
raise
else:
continue