Как переделать список в значении словаря во множество?
Нужно написать функцию friends, которая из списка пар друзей сделает словарь, в котором каждому человеку будет сопоставлено множество его друзей.
friends([("Ivan", "Maria"),
("Ella", "Ivan"),
("Ivan", "Oleg")]) == \
{"Ivan":{"Maria", "Ella", "Oleg"},
"Ella":{"Ivan"},
"Maria": {"Ivan"},
"Oleg": {"Ivan"}}
Вот мой код:
def friends(pairs):
result = dict()
for pair in pairs:
if pair[0] not in result:
result[pair[0]] = []
if pair[1] not in result:
result[pair[1]] = []
if pair[1] not in result[pair[0]]:
result[pair[0]].append(pair[1])
if pair[0] not in result[pair[1]]:
result[pair[1]].append(pair[0])
return result
res = friends([("Ivan", "Maria"), ("Ella", "Ivan"), ("Ivan", "Oleg")])
print(res)
Выводит:
{'Ivan': ['Maria', 'Ella', 'Oleg'], 'Maria': ['Ivan'], 'Ella': ['Ivan'], 'Oleg': ['Ivan']}
А надо, чтобы вместо списка в значении словаря было множество:
{'Ivan': {'Maria', 'Ella', 'Oleg'}, 'Maria': {'Ivan'}, 'Ella': {'Ivan'}, 'Oleg': {'Ivan'}}
как можно преобразовать?
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
@Danis сказал, что нужно множество, за что ему спасибо - тогда код такой:
res = dict()
for pair in friends:
res[pair[0]] = {pair[1]} if pair[0] not in res else res[pair[0]] | {pair[1]}
res[pair[1]] = {pair[0]} if pair[1] not in res else res[pair[1]] | {pair[0]}
А так не устраивает (по сути в лоб):
friends = [("Ivan", "Maria"),
("Ella", "Ivan"),
("Ivan", "Oleg")]
res = dict()
for pair in friends:
if pair[0] in res:
res[pair[0]].append(pair[1])
else:
res[pair[0]] = [pair[1]]
if pair[1] in res:
res[pair[1]].append(pair[0])
else:
res[pair[1]] = [pair[0]]
print(res)
или чуть покороче:
res = dict()
for pair in friends:
if pair[0] not in res: res[pair[0]] = []
res[pair[0]].append(pair[1])
if pair[1] not in res: res[pair[1]] = []
res[pair[1]].append(pair[0])
или еще чуть покороче:
res = dict()
for pair in friends:
res[pair[0]] = [pair[1]] if pair[0] not in res else res[pair[0]] + [pair[1]]
res[pair[1]] = [pair[0]] if pair[1] not in res else res[pair[1]] + [pair[0]]