Форум сайта python.su
Здравствуйте, помогите решить задачу, требуется сравнить ключи из (первого, второго, третьего и тд) словаря на вхождение в остальных словарях
a = {'anya':{'age': '18', 'dict': 'a'}, 'tanya':{'age':'23', 'dict': 'a'}, 'vika':{'age':'23', 'dict': 'a'}} b = {'tanya':{'age': '34', 'dict': 'b'}, 'vika':{'age':'76', 'dict': 'b'}, 'sergey':{'age':'65', 'dict': 'b'}, 'marina':{'age':'23', 'dict': 'b'}, 'anya':{'age':'33', 'dict': 'b'}} c = {'dima':{'age': '45', 'dict': 'c'}, 'sergey':{'age':'85', 'dict': 'c'}} d = {'sergey':{'age':'75', 'dict': 'd'}, 'anya':{'age': '29', 'dict': 'd'}} e = ... f = ...
'anya' :{'age': '18', 'dict': 'a'},'anya' :{'age': '33', 'dict': 'b'} 'anya' :{'age': '18', 'dict': 'a'},'anya' :{'age': '29', 'dict': 'd'} 'tanya' :{'age': '23', 'dict': 'a'},'tanya':{'age': '34', 'dict': 'b'} 'vika' :{'age': '23', 'dict': 'a'},'vika' :{'age': '76', 'dict': 'b'} 'sergey':{'age': '65', 'dict': 'b'},'sergey':{'age': '85', 'dict': 'c'} 'sergey':{'age': '65', 'dict': 'b'},'sergey':{'age': '75', 'dict': 'd'} 'anya' :{'age': '33', 'dict': 'b'},'anya' :{'age': '29', 'dict': 'd'} 'sergey':{'age': '85', 'dict': 'c'},'sergey':{'age': '75', 'dict': 'd'}
Отредактировано solovey6o2 (Авг. 17, 2018 10:53:04)
Офлайн
Конкретизируй, что должно получиться.
Не вижу, где
'anya': {'age': '29', 'dict': 'd'}
Отредактировано py.user.next (Авг. 17, 2018 01:31:34)
Офлайн
py.user.nextподправил результат, допустил ошибку в последовательности вывода.
Конкретизируй, что должно получиться.Не вижу, где
'anya': {'age': '29', 'dict': 'd'}
for i in a: if i in b: print (i, a[i], i, b[i]) if i in c: print(i, a[i], i, c[i]) if i in d: print(i, a[i], i, d[i])
anya {'age': '18', 'dict': 'a'} anya {'age': '33', 'dict': 'b'} anya {'age': '18', 'dict': 'a'} anya {'age': '29', 'dict': 'd'} tanya {'age': '23', 'dict': 'a'} tanya {'age': '34', 'dict': 'b'} vika {'age': '23', 'dict': 'a'} vika {'age': '76', 'dict': 'b'}
Отредактировано solovey6o2 (Авг. 17, 2018 11:15:10)
Офлайн
Вот для этих словарей результат запиши точно
a = {'anya': {'age': '18', 'dict': 'a'}, 'tanya': {'age': '23', 'dict': 'a'}, 'vika': {'age': '23', 'dict': 'a'}} b = {'tanya': {'age': '34', 'dict': 'b'}, 'vika': {'age': '76', 'dict': 'b'}, 'sergey': {'age': '65', 'dict': 'b'}} c = {'dima': {'age': '45', 'dict': 'c'}, 'sergey': {'age': '85', 'dict': 'c'}} d = {'sergey': {'age': '75', 'dict': 'd'}, 'anya': {'age': '29', 'dict': 'd'}}
Отредактировано py.user.next (Авг. 17, 2018 12:58:33)
Офлайн
solovey6o2ну начнем с того что такой результат вы хрен получите, потому как на выходе у вас словарь, а у словаря не может быть двух элементов с одинаковыми ключами.
то что должно получиться ниже.'anya' :{'age': '18', 'dict': 'a'},'anya' :{'age': '33', 'dict': 'b'}
a = {'anya':{'age': '18', 'dict': 'a'}, 'tanya':{'age':'23', 'dict': 'a'}, 'vika':{'age':'23', 'dict': 'a'}} b = {'tanya':{'age': '34', 'dict': 'b'}, 'vika':{'age':'76', 'dict': 'b'}, 'sergey':{'age':'65', 'dict': 'b'}, 'marina':{'age':'23', 'dict': 'b'}, 'anya':{'age':'33', 'dict': 'b'}} c = {'dima':{'age': '45', 'dict': 'c'}, 'sergey':{'age':'85', 'dict': 'c'}} d = {'sergey':{'age':'75', 'dict': 'd'}, 'anya':{'age': '29', 'dict': 'd'}} def get_keys(*args): # в *args должны предаваться словари names = list() # Просматриваем все словари и собираем ключи всех словарей в список for dct in args: names.extend(dct.keys()) res = list() # Проходим по всем ключам, и провряем есть ли такой в словаре, если есть то добавляем в список for key in set(names): for dct in args: item = dct.get(key) if item: res.append({key:item}) return res print(get_keys(a, b, c, d)) >>> [{'dima': {'age': '45', 'dict': 'c'}}, {'sergey': {'age': '65', 'dict': 'b'}}, {'sergey': {'age': '85', 'dict': 'c'}}, {'sergey': {'age': '75', 'dict': 'd'}}, {'tanya': {'age': '23', 'dict': 'a'}}, {'tanya': {'age': '34', 'dict': 'b'}}, {'marina': {'age': '23', 'dict': 'b'}}, {'vika': {'age': '23', 'dict': 'a'}}, {'vika': {'age': '76', 'dict': 'b'}}, {'anya': {'age': '18', 'dict': 'a'}}, {'anya': {'age': '33', 'dict': 'b'}}, {'anya': {'age': '29', 'dict': 'd'}}] >>>
[code python][/code]
Отредактировано PEHDOM (Авг. 17, 2018 18:09:48)
Офлайн
py.user.nextВот что нужно.
Вот для этих словарей результат запиши точно
{'anya' :{'age': '18', 'dict': 'a'}},{'anya' :{'age': '33', 'dict': 'b'}} {'anya' :{'age': '18', 'dict': 'a'}},{'anya' :{'age': '29', 'dict': 'd'}} {'tanya' :{'age': '23', 'dict': 'a'}},{'tanya' :{'age': '34', 'dict': 'b'}} {'vika' :{'age': '23', 'dict': 'a'}},{'vika' :{'age': '76', 'dict': 'b'}} {'sergey':{'age': '65', 'dict': 'b'}},{'sergey':{'age': '85', 'dict': 'c'}} {'sergey':{'age': '65', 'dict': 'b'}},{'sergey':{'age': '75', 'dict': 'd'}} {'anya' :{'age': '33', 'dict': 'b'}},{'anya' :{'age': '29', 'dict': 'd'}} {'sergey':{'age': '85', 'dict': 'c'}},{'sergey':{'age': '75', 'dict': 'd'}}
Отредактировано solovey6o2 (Авг. 17, 2018 20:22:10)
Офлайн
PEHDOMне то, здесь дима и марина есть.
Отредактировано solovey6o2 (Авг. 17, 2018 20:17:05)
Офлайн
solovey6o2Где ты anya 33 взял? Я же её удалил для упрощения.
Вот что нужно.{'anya' :{'age': '18', 'dict': 'a'}},{'anya' :{'age': '33', 'dict': 'b'}}
PEHDOMОн же сам ещё не понимает точно
но еслв целом то алгоритм примерно такой:
Офлайн
py.user.nextПоправил
этих
{'anya': {'age': '18', 'dict': 'a'}}, {'anya': {'age': '29', 'dict': 'd'}} {'tanya': {'age': '23', 'dict': 'a'}}, {'tanya': {'age': '34', 'dict': 'b'}} {'vika': {'age': '23', 'dict': 'a'}}, {'vika': {'age': '76', 'dict': 'b'}} {'sergey': {'age': '65', 'dict': 'b'}}, {'sergey': {'age': '85', 'dict': 'c'}} {'sergey': {'age': '65', 'dict': 'b'}}, {'sergey': {'age': '75', 'dict': 'd'}} {'sergey': {'age': '85', 'dict': 'c'}}, {'sergey': {'age': '75', 'dict': 'd'}}
Офлайн
Входные данные (отсюда)
a = {'anya': {'age': '18', 'dict': 'a'}, 'tanya': {'age': '23', 'dict': 'a'}, 'vika': {'age': '23', 'dict': 'a'}} b = {'tanya': {'age': '34', 'dict': 'b'}, 'vika': {'age': '76', 'dict': 'b'}, 'sergey': {'age': '65', 'dict': 'b'}} c = {'dima': {'age': '45', 'dict': 'c'}, 'sergey': {'age': '85', 'dict': 'c'}} d = {'sergey': {'age': '75', 'dict': 'd'}, 'anya': {'age': '29', 'dict': 'd'}}
{'anya': {'age': '18', 'dict': 'a'}}, {'anya': {'age': '29', 'dict': 'd'}} {'tanya': {'age': '23', 'dict': 'a'}}, {'tanya': {'age': '34', 'dict': 'b'}} {'vika': {'age': '23', 'dict': 'a'}}, {'vika': {'age': '76', 'dict': 'b'}} {'sergey': {'age': '65', 'dict': 'b'}}, {'sergey': {'age': '85', 'dict': 'c'}} {'sergey': {'age': '65', 'dict': 'b'}}, {'sergey': {'age': '75', 'dict': 'd'}} {'sergey': {'age': '85', 'dict': 'c'}}, {'sergey': {'age': '75', 'dict': 'd'}}
>>> a = {'anya': {'age': '18', 'dict': 'a'}, ... 'tanya': {'age': '23', 'dict': 'a'}, ... 'vika': {'age': '23', 'dict': 'a'}} >>> b = {'tanya': {'age': '34', 'dict': 'b'}, ... 'vika': {'age': '76', 'dict': 'b'}, ... 'sergey': {'age': '65', 'dict': 'b'}} >>> c = {'dima': {'age': '45', 'dict': 'c'}, ... 'sergey': {'age': '85', 'dict': 'c'}} >>> d = {'sergey': {'age': '75', 'dict': 'd'}, ... 'anya': {'age': '29', 'dict': 'd'}} >>> >>> def f(lst, acc): ... if not lst: ... return acc ... head, rest = lst[0], lst[1:] ... for k in head: ... for d in rest: ... if k in d: ... acc.append(({k: head[k]}, {k: d[k]})) ... return f(lst[1:], acc) ... >>> out = f((a, b, c, d), []) >>> >>> import pprint >>> pprint.pprint(out) [({'anya': {'age': '18', 'dict': 'a'}}, {'anya': {'age': '29', 'dict': 'd'}}), ({'tanya': {'age': '23', 'dict': 'a'}}, {'tanya': {'age': '34', 'dict': 'b'}}), ({'vika': {'age': '23', 'dict': 'a'}}, {'vika': {'age': '76', 'dict': 'b'}}), ({'sergey': {'age': '65', 'dict': 'b'}}, {'sergey': {'age': '85', 'dict': 'c'}}), ({'sergey': {'age': '65', 'dict': 'b'}}, {'sergey': {'age': '75', 'dict': 'd'}}), ({'sergey': {'age': '85', 'dict': 'c'}}, {'sergey': {'age': '75', 'dict': 'd'}})] >>>
Отредактировано py.user.next (Авг. 20, 2018 10:29:12)
Офлайн