Найти - Пользователи
Полная версия: Найти вхождение ключа в 2-х и более словарях.
Начало » Центр помощи » Найти вхождение ключа в 2-х и более словарях.
1 2
solovey6o2
Здравствуйте, помогите решить задачу, требуется сравнить ключи из (первого, второго, третьего и тд) словаря на вхождение в остальных словарях
 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'}
py.user.next
Конкретизируй, что должно получиться.

Не вижу, где
  
'anya': {'age': '29', 'dict': 'd'}
на первом месте стоит.

Какая-то неточная у тебя задача. Сначала пойми точно, что тебе надо.
solovey6o2
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])
по такому принципу нужно сравнивать, как это сделать красиво и правильно так как словарей может быть около 10.
результат
 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'}
py.user.next
Вот для этих словарей результат запиши точно
  
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'}}
PEHDOM
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'}}]
>>> 
solovey6o2
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
PEHDOM
не то, здесь дима и марина есть.
Выводить нужно построчно по два словаря, конечно не одним словарем.
py.user.next
solovey6o2
Вот что нужно.
 {'anya'  :{'age': '18', 'dict': 'a'}},{'anya'  :{'age': '33', 'dict': 'b'}}
Где ты anya 33 взял? Я же её удалил для упрощения.
Ещё раз читай, именно для этих данных результат сделай.

PEHDOM, как ты понял?
PEHDOM
но еслв целом то алгоритм примерно такой:
Он же сам ещё не понимает точно

Сейчас ему мозги настроим, потом можно и код писать уже.
solovey6o2
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'}}
py.user.next
Входные данные (отсюда)
  
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'}})]
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB