3

5 つのリストがあり、それらを階層辞書にマップしたいと考えています。

私が持っているとしましょう:

temp = [25, 25, 25, 25]
volt = [3.8,3.8,3.8,3.8]
chan = [1,1,6,6]
rate = [12,14,12,14]
power = [13.2,15.3,13.8,15.1]

私の辞書として欲しいのはこれです:

{25:{3.8:{1:{12:13.2,14:15.3},6:{12:13.8,14:15.1}}}}

基本的に辞書構造は次のとおりです。

{temp:{volt:{chan:{rate:power}}}}

zip 関数を使用してみましたが、最上位のリストに値が繰り返されているため、この場合は役に立ちません

4

2 に答える 2

8

これはほんの少しだけテストされていますが、うまくいくようです。基本的に、何をするかfは、のを作成することdefaultdictですdefaultdicts

f = lambda: collections.defaultdict(f)
d = f()
for i in range(len(temp)):
    d[temp[i]][volt[i]][chan[i]][rate[i]] = power[i]

例:

>>> print d[25][3.8][6][14]
15.1

(このアイデアは、関連する質問に対するこの回答から借用されています。)

于 2012-09-25T20:30:39.910 に答える
2

以下を試すことができます...私はそれがあなたが望むものを提供すると信じています

>>> # Given your sample data.
>>> ans = {}
>>> for (t, v, c, r, p) in zip(temp, volt, chan, rate, power):
...     if not t in ans:
...             ans[t] = {}
...     if not v in ans[t]:
...             ans[t][v] = {}
...     if not c in ans[t][v]:
...             ans[t][v][c] = {}
...     if not r in ans[t][v][c]:
...             ans[t][v][c][r] = p
>>> print ans
{25: {3.8: {1: {12: 13.2, 14: 15.3}, 6: {12: 13.8, 14: 15.1}}}}
于 2012-09-25T20:33:50.497 に答える