2016-12-04 1 views
1

목록에있는 값의 발생 횟수를 제공하는 값 사전이 있습니다. 값에 따라 이전 사전을 별도의 사전으로 분리하는 새 사전을 어떻게 반환 할 수 있습니까? 사전을 키의 발생 횟수로 "정렬"하는 방법?

즉,이 사전을 정렬 할이 하나

>>> a = {'A':2, 'B':3, 'C':4, 'D':2, 'E':3} 

합니다.

b = {2: {'A', 'D'}, 3: {'B', 'E'}, 4: {'C'}} 

어떻게 문제에 접근합니까?

답변

3
from collections import defaultdict 

a = {'A': 2, 'B': 3, 'C': 4, 'D': 2, 'E': 3} 

b = defaultdict(set) 
for k, v in a.items(): 
    b[v].add(k) 

이것은 당신이 얻을 것이다 무엇 : 당신은 b = dict(b)과 이후 정상 딕셔너리에 b을 변환 할 수 있습니다

defaultdict(<class 'set'>, {2: {'D', 'A'}, 3: {'B', 'E'}, 4: {'C'}}) 

.

+1

'dict'으로 명시 적으로 변환 할 필요가 없습니다. 정상적인 사전처럼 작동합니다. –

+0

@MoinuddinQuadri 꼭 그렇지는 않습니다. 예를 들어 누락 된 키에 액세스하려고하면'defaultdict'에 항목이 추가되므로 나중에 해당 키가 사전에 있는지 여부를 확인하면'True'가됩니다. 이는 원하는 것이 아닐 수도 있습니다. – fenceop

0

당신이 나 같은 파이썬 초보자 인 경우, 당신은 아마 싶어이

A = { 'A'시도 : 2, 'B': 3, 'C': 4, 'D': 2, ' E ': 3}는 키위한

B = {}

:

lst = [] 

new_key = a[key] 

if new_key not in b: 

    lst.append(key) 

    b[new_key] = lst 

else: 

    b[new_key].append(key) 

인쇄 (b)

그것은 P의 가변 특성을 이용 ython 사전 원하는 결과를 얻을 수 있습니다.

관련 문제