2017-06-10 11 views
5

Potrzebuję pomocy w zakresie optymalnego i dobrego rozwiązania dla mojej odpowiedzi.Optymalny sposób podpowiedzi w celu uzyskania wyniku końcowego

Mam wejściowego dict takiego:

a = { 
(1, 1403): {1:0.1, 2:0.1, 3:0.2}, 
(1, 1412): {1:0.1, 2:0.1, 3:0.2}, 
(1, 1411): {1:0.1, 2:0.1, 3:0.2}, 
(1, 1402): {1:0.1, 2:0.1, 3:0.2}, 
(1, 1411): {1:0.1, 2:0.1, 3:0.2}, 
(2, 1501): {1:0.1, 2:0.1, 3:0.2}, 
(2, 1511): {1:0.1, 2:0.1, 3:0.2}, 
(2, 1700): {1:0.1, 2:0.1, 3:0.2}, 
(2, 1120): {1:0.1, 2:0.1, 3:0.2}, 
(2, 2133): {1:0.1, 2:0.1, 3:0.2}, 
(2, 2130): {1:0.1, 2:0.1, 3:0.2}, 
(2, 901): {1:0.1, 2:0.1, 3:0.2}, 
(3, 1111): {1:0.1, 2:0.1, 3:0.2}, 
} 

Chcę Output tak:

{1: { 1403: {1: 0.1, 2: 0.1, 3: 0.2}, 
     1402: {1: 0.1, 2: 0.1, 3: 0.2}, 
     1411: {1: 0.1, 2: 0.1, 3: 0.2}, 
     1412: {1: 0.1, 2: 0.1, 3: 0.2}}, 

2: {1120: {1: 0.1, 2: 0.1, 3: 0.2}, 
    2130: {1: 0.1, 2: 0.1, 3: 0.2}, 
    1700: {1: 0.1, 2: 0.1, 3: 0.2}, 
    901: {1: 0.1, 2: 0.1, 3: 0.2}, 
    1511: {1: 0.1, 2: 0.1, 3: 0.2}, 
    1501: {1: 0.1, 2: 0.1, 3: 0.2}, 
    2133: {1: 0.1, 2: 0.1, 3: 0.2}}, 
3: {1111: {1: 0.1, 2: 0.1, 3: 0.2}}} 

Zrobiłem kod poniżej

data_dict = defaultdict(dict) 
for (a,b), c in a.items(): 
    data_dict[a].update({b:c}) 

miałem już powyżej odpowiedź do osiągnięcia moje pożądane wyniki, czy to dobre podejście? Czy istnieją lepsze rozwiązania, aby osiągnąć wynik (w sposób pytonowy), muszą być optymalne.

+0

Wygląda dobrze dla mnie. – Ding

+0

Nie ma lepszego rozwiązania niż to? @Di – Sagar

+0

Może ktoś inny będzie miał lepsze podejście, ale zrobiłbym to w taki sam sposób, jak to zrobiłeś, łatwo go przeczytać. – Ding

Odpowiedz

0

Jednym ze sposobów byłoby użycie funkcji rozpoznawania dyktowania, jak opisano w PEP 274, która może być bardziej pythonic. Jednak naiwne rozwiązanie result = {a: {b: c} for (a, b), c in a.items()} nie działa zgodnie z oczekiwaniami. (Otrzymasz słownik z trzema kluczami, z których każdy zawiera jeden słownik).

Może zaistnieć pewne sztuczki w zrozumieniu dyktafonu, które umożliwią pożądane zachowanie, ale wydaje się, że kod nie stałby się bardzo czytelny lub zrozumiały, a zatem bardzo je interpretuje.

Krótko mówiąc, twoje własne rozwiązanie byłoby dość pytonowe.

Powiązane problemy