0

ファイル名、experiments = ['f1','f2','f3','f4']時刻t = ['am','pm']、および収集されたデータの種類のリストがあります['temp','humidity']

これらから、次の形式で辞書内に辞書を作成したいと思います。

dict = {'f1': { am : {'temp': [], 'humidity': []} , pm : {'temp': [], 'humidity': []}},
        'f2': { am : {'temp': [], 'humidity': []} , pm : {'temp': [], 'humidity': []}},
        'f3': { am : {'temp': [], 'humidity': []} , pm : {'temp': [], 'humidity': []}},
        'f4': { am : {'temp': [], 'humidity': []} , pm : {'temp': [], 'humidity': []}}}

これを行う最善の方法は何ですか?

4

3 に答える 3

5
{z: {y: {x: [] for x in data_types} for y in t} for z in experiments}
于 2012-05-18T04:32:25.823 に答える
2

私が今まで見たことがあれば、理解するためのケース。

from copy import deepcopy
datatypes = ['temp','humidity']
times = ['am','pm']
experiments = ['f1','f2','f3','f4']

datatypes_dict = dict((k, []) for k in datatypes)
times_dict = dict((k, deepcopy(datatypes_dict)) for k in times)
experiments_dict = dict((k, deepcopy(times_dict)) for k in experiments)

またはより良いdict理解方法(python 2.7+)

datatypes_dict = {k: [] for k in datatypes}
times_dict = {k: deepcopy(datatypes_dict) for k in times}
experiments_dict = {k: deepcopy(times_dict) for k in experiments}

それらを入れ子にすることはできますが、物事がまったく複雑な場合、驚くほど速くなります。

ただし、この使用例では、@ marshall.ward の回答

{z: {y: {x: [] for x in data_types} for y in t} for z in experiments}

deepcopy()ing を回避できるため、私のものよりもはるかに優れています。

于 2012-05-18T04:32:54.770 に答える
1

出力形式で芸術的なライセンスを取得する

>>> from collections import namedtuple, defaultdict
>>> from itertools import product
>>> experiments = ['f1','f2','f3','f4']
>>> times_of_day = ['am','pm']
>>> data_types = ['temp','humidity']
>>> DataItem = namedtuple('DataItem', data_types)
>>> D=defaultdict(dict)
>>> for ex, tod in product(experiments, times_of_day):
...     D[ex][tod]=DataItem([], [])
... 
>>> D
defaultdict(<type 'dict'>, {'f1': {'am': DataItem(temp=[], humidity=[]), 'pm': DataItem(temp=[], humidity=[])}, 'f2': {'am': DataItem(temp=[], humidity=[]), 'pm': DataItem(temp=[], humidity=[])}, 'f3': {'am': DataItem(temp=[], humidity=[]), 'pm': DataItem(temp=[], humidity=[])}, 'f4': {'am': DataItem(temp=[], humidity=[]), 'pm': DataItem(temp=[], humidity=[])}})

このようなデータ項目にアクセスできます

>>> D['f1']['am'].temp
[]
>>> D['f1']['am'].humidity
[]
于 2012-05-18T05:15:22.087 に答える