[英]python how to create dictionaries in dictionaries from lists
我有文件名列表,實驗= ['f1','f2','f3','f4'],一天中的時間,t = ['am','pm']和收集的數據類型, ['temp','濕度']。
從這些,我想以以下格式在詞典中創建詞典:
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': []}}}
最好的方法是什么? 非常感謝高級。
{z: {y: {x: [] for x in data_types} for y in t} for z in experiments}
我曾經見過一個理解的案例。
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()。
使用輸出格式獲取一些藝術許可
>>> 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
[]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.