Преобразование словаря Python с использованием словарного понимания - PullRequest
0 голосов
/ 02 мая 2018

У меня есть следующий словарь Python:

{
 "cat": 1,
 "dog": 1,
 "person": 2,
 "bear": 2,
 "bird": 3
}

Я хотел бы использовать словарь, чтобы преобразовать его в следующий словарь:

{
 1 : ["cat", "dog"],
 2 : ["person", "bear"],
 3 : ["bird"]
}

Как я могу сделать это в один лайнер?

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Вы можете использовать itertools.groupby с однострочником:

import itertools
d = {'person': 2, 'bird': 3, 'dog': 1, 'bear': 2, 'cat': 1}
new_d = {a:[i for i, _ in b] for a, b in itertools.groupby(sorted(d.items(), key=lambda x:x[-1]), key=lambda x:x[-1])}

Выход:

{1: ['cat', 'dog'], 2: ['person', 'bear'], 3: ['bird']}
0 голосов
/ 02 мая 2018
>>> a = {
...  "cat": 1,
...  "dog": 1,
...  "person": 2,
...  "bear": 2,
...  "bird": 3
... }
>>> 
>>> b = {}
>>> for key, value in a.items():
...     if value not in b:
...         b[value] = [key]
...     else:
...         b[value].append(key)
... 
>>> print(b)
{1: ['cat', 'dog'], 2: ['person', 'bear'], 3: ['bird']}
0 голосов
/ 02 мая 2018

Это неэффективно, так как это не то, как диктовки предназначены для использования, но вы можете сделать следующее

d = {"cat": 1, "dog": 1, "person": 2, "bear": 2, "bird": 3}

new = {v: [i[0] for i in d.items() if i[1] == v] for v in d.values()}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...