Как объединить словари из нескольких списков, если они имеют общую пару ключ-значение?Как слить несколько словарей из отдельных списков, если они разделяют пары ключей?
К примеру, здесь есть три списка словарей:
l1 = [{'fruit':'banana','category':'B'},{'fruit':'apple','category':'A'}]
l2 = [{'type':'new','category':'A'},{'type':'old','category':'B'}]
l3 = [{'order':'2','type':'old'},{'order':'1','type':'new'}]
Желаемый результат:
l = [{'fruit':'apple','category':'A','order':'1','type':'new'},{'fruit':'banana','category':'B','order':'2','type':'old'}]
Хитрость в том, что я хочу эту функцию, чтобы принимать только в списках в качестве аргументов и не ключи, потому что я хочу только подключить любое количество списков словарей и не беспокоиться о том, какие ключевые имена являются перекрывающимися (в этом случае ключевыми именами, которые объединяют всех трех, являются «категория» и «категория», тип').
Следует отметить, что индекс не должен иметь значения, поскольку он должен основываться только на общих элементах.
Вот моя попытка:
def combine_lists(*args):
base_list = args[0]
L = []
for sublist in args[1:]:
L.extend(sublist)
for D in base_list:
for Dict in L:
if any([tup in Dict.items() for tup in D.items()]):
D.update(Dict)
return base_list
нет общих пар между 'l1' и' l3'. Все словари в одном списке имеют одинаковые ключи. Гарантировано ли это? – jfs
Да, это намеренно, так как словарь в l1 должен быть в состоянии соответствовать со словарем в l3 через словарь в l2 (например, {'fruit': 'banana', 'category': 'B'} сливается с {'order ':' 2 ',' type ':' old '} как {' type ':' old ',' category ':' B '} соединяет их). Предположим, что все словари в одном списке имеют одинаковые ключи. – Chris
Я бы рекомендовал критически изучить ваши алгоритмы и структуры данных, чтобы вам не приходилось иметь дело с такими странностями. – TigerhawkT3