2015-06-24 3 views
-1

Скажем, у меня есть словарь со многими элементами, которые имеют одинаковые значения; например:Python - Разделение словаря на словари с одинаковыми значениями?

dict = {'hello':'a', 'goodbye':'z', 'bonjour':'a', 'au revoir':'z', 'how are you':'m'} 

Как бы я разделить словарь в словари (в данном случае, три словарей) с теми же значениями? В примере, я хочу закончить с этим:

dict1 = {'hello':'a', 'bonjour':'a'} 
dict2 = {'goodbye':'z', 'au revoir':'z'} 
dict3 = {'how are you':'m'} 
+1

'from itertools import groupby' – LittleQ

+1

Вы уверены, что не хотите просто превращать это в список списков? например '{'a': ['hello', 'bonjour'], 'z': ['goodbye', 'au revoir'], 'm': ['how are you'}}' Кроме того, вам действительно нужно чтобы показать, что вы пробовали, и какие проблемы у вас есть, если вы хотите получить помощь. –

ответ

6

Вы можете использовать itertools.groupby собрать с помощью общих ценностей, а затем создать dict объекты для каждой группы в списке понимание.

>>> from itertools import groupby 
>>> import operator 
>>> by_value = operator.itemgetter(1) 
>>> [dict(g) for k, g in groupby(sorted(d.items(), key = by_value), by_value)] 
[{'hello': 'a', 'bonjour': 'a'}, 
{'how are you': 'm'}, 
{'goodbye': 'z', 'au revoir': 'z'}] 
0

Другой способ без импорта каких-либо модулей выглядит следующим образом:

def split_dict(d): 
    unique_vals = list(set(d.values())) 
    split_dicts = [] 
    for i in range(len(unique_vals)): 
     unique_dict = {} 
     for key in d: 
      if d[key] == unique_vals[i]: 
       unique_dict[key] = d[key] 
     split_dicts.append(unique_dict) 
    return split_dicts 

Для каждого уникального значения во входном словаре, мы создаем словарь и добавить пары ключей и значений из входного словаря, где значение равна этому значению. Затем мы добавляем каждый словарь в список, который, наконец, возвращается.

 Смежные вопросы

  • Нет связанных вопросов^_^