#python #python_3x #python_2x #словари #объединение
Имеется два списка словаря: Первый: x = {'title':'[Лада]', 'prise':'[70000]', 'status':'[Непродана]'},{'title':'[нисан]', 'prise':'[70000]', 'status':'[Непродана]'} Второй: y = {'title':'[Лада]', 'prise':'[70000]', 'status':'[Продана]'},{'title':'[БМВ]', 'prise':'[70000]', 'status':'[Непродана]'} Желаемый результат: z = {'title':'[Лада]', 'prise':'[70000]', 'status':'[Продана]'},{'title':'[нисан]', 'prise':'[70000]', 'status':'[Непродана]'}, {'title':'[БМВ]', 'prise':'[70000]', 'status':'[Непродана]'}
Ответы
Ответ 1
Pandas замечательно справляется с подобными задачами: import pandas as pd def merge(*args): return (pd.concat([pd.DataFrame(x if isinstance(x, list) else list(x)) for x in args], ignore_index=True) .drop_duplicates('title', keep='last')) def merge2(*args): return (pd.concat([pd.DataFrame(x if isinstance(x, list) else list(x)) for x in args], ignore_index=True) .drop_duplicates('title', keep='last') .to_dict('records')) В виде Pandas DataFrame: In [72]: merge(x, y) Out[72]: prise status title 1 [70000] [Непродана] [нисан] 2 [70000] [Продана] [Лада] 3 [70000] [Непродана] [БМВ] В виде списка словарей: In [73]: merge2(x, y) Out[73]: [{'prise': '[70000]', 'status': '[Непродана]', 'title': '[нисан]'}, {'prise': '[70000]', 'status': '[Продана]', 'title': '[Лада]'}, {'prise': '[70000]', 'status': '[Непродана]', 'title': '[БМВ]'}]Ответ 2
z = {} for d in sorted((d for o in (x, y) for d in o), key=lambda d: d['status'] == '[Непродана]'): t = d['title'] if t not in z: z[t] = d z = list(z.values()) print('\n'.join(map(str, z))) # {'title': '[Лада]', 'prise': '[70000]', 'status': '[Продана]'} # {'title': '[нисан]', 'prise': '[70000]', 'status': '[Непродана]'} # {'title': '[БМВ]', 'prise': '[70000]', 'status': '[Непродана]'}Ответ 3
Обратите внимание первый это не словарь а список, содержащий словари. Объединить словари: x = {'title':'[Лада]', 'prise':'[70000]', 'status':'[Непродана]'},{'title':'[нисан]', 'prise':'[70000]', 'status':'[Непродана]'} y = {'title':'[Лада]', 'prise':'[70000]', 'status':'[Продана]'},{'title':'[БМВ]', 'prise':'[70000]', 'status':'[Непродана]'} x.update(y) print "Value : %s" % x
Комментариев нет:
Отправить комментарий