Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python如何从列表中的字典中创建字典_Python_List_Dictionary Comprehension - Fatal编程技术网

python如何从列表中的字典中创建字典

python如何从列表中的字典中创建字典,python,list,dictionary-comprehension,Python,List,Dictionary Comprehension,我有一个文件名列表,实验=['f1','f2','f3','f4'],一天的时间,t=['am','pm'],以及收集的数据类型,['temp','湿度'] 根据这些,我希望以以下格式在字典中创建字典: dict = {'f1': { am : {'temp': [], 'humidity': []} , pm : {'temp': [], 'humidity': []}}, 'f2': { am : {'temp': [], 'humidity': []} , pm : {'t

我有一个文件名列表,实验=['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': []}}}

最好的方法是什么?非常感谢advanced。

如果我曾经看到过,这是一个理解的案例

{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)
或者更好的听写理解方式(python 2.7+)

你可以把它们嵌套起来,但如果事情很复杂的话,它会很快让人大吃一惊

然而,在这个用例中,@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=[])}})

真的。。。我们住在富图尔!这不是到处共享相同的
数据类型和
时间吗?例如
experiments\u dict['f1']['am']['temp'].[append(25)
可能无法按操作预期进行。回想起来,我选择不嵌套可能是错误的方法。我学会了更多的回答问题,而不是问他们!应该注意的是,Python 2.7中引入了dict理解绝对正确,感谢您添加这些信息。当我被迫使用Python2.6时,我自己也会被这个问题所困扰。
>>> 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
[]