Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 16, 2018 18:30:06

solovey6o2
Зарегистрирован: 2015-11-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти вхождение ключа в 2-х и более словарях.

Здравствуйте, помогите решить задачу, требуется сравнить ключи из (первого, второго, третьего и тд) словаря на вхождение в остальных словарях

 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)

Офлайн

#2 Авг. 17, 2018 01:29:01

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9715
Репутация: +  842  -
Профиль   Отправить e-mail  

Найти вхождение ключа в 2-х и более словарях.

Конкретизируй, что должно получиться.

Не вижу, где

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

Какая-то неточная у тебя задача. Сначала пойми точно, что тебе надо.



Отредактировано py.user.next (Авг. 17, 2018 01:31:34)

Офлайн

#3 Авг. 17, 2018 11:14:10

solovey6o2
Зарегистрирован: 2015-11-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти вхождение ключа в 2-х и более словарях.

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'}

Отредактировано solovey6o2 (Авг. 17, 2018 11:15:10)

Офлайн

#4 Авг. 17, 2018 12:57:08

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9715
Репутация: +  842  -
Профиль   Отправить e-mail  

Найти вхождение ключа в 2-х и более словарях.

Вот для этих словарей результат запиши точно

  
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)

Офлайн

#5 Авг. 17, 2018 18:05:31

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Найти вхождение ключа в 2-х и более словарях.

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)

Офлайн

#6 Авг. 17, 2018 19:41:53

solovey6o2
Зарегистрирован: 2015-11-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти вхождение ключа в 2-х и более словарях.

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)

Офлайн

#7 Авг. 17, 2018 19:51:38

solovey6o2
Зарегистрирован: 2015-11-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти вхождение ключа в 2-х и более словарях.

PEHDOM
не то, здесь дима и марина есть.
Выводить нужно построчно по два словаря, конечно не одним словарем.

Отредактировано solovey6o2 (Авг. 17, 2018 20:17:05)

Офлайн

#8 Авг. 17, 2018 23:25:07

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9715
Репутация: +  842  -
Профиль   Отправить e-mail  

Найти вхождение ключа в 2-х и более словарях.

solovey6o2
Вот что нужно.
 {'anya'  :{'age': '18', 'dict': 'a'}},{'anya'  :{'age': '33', 'dict': 'b'}}
Где ты anya 33 взял? Я же её удалил для упрощения.
Ещё раз читай, именно для этих данных результат сделай.

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

Сейчас ему мозги настроим, потом можно и код писать уже.



Офлайн

#9 Авг. 20, 2018 09:19:23

solovey6o2
Зарегистрирован: 2015-11-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Найти вхождение ключа в 2-х и более словарях.

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'}}

Офлайн

#10 Авг. 20, 2018 10:26:20

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9715
Репутация: +  842  -
Профиль   Отправить e-mail  

Найти вхождение ключа в 2-х и более словарях.

Входные данные (отсюда)

  
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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version