我有两个元组,我需要组合成一个字典。元组2(值)正好是元组1(键)长度的一半
validexts = (
'.pz3','.cr2','.pz2','.pp2','.hr2','.fc2','.hd2','.lt2','.cm2','.mt5','.mc6',
'.pzz','.crz','.p2z','.ppz','.hrz','.fcz','.hdz','.ltz','.cmz','.mz5','.mcz' )
validvalues = (
'scene','character','pose','props','hair','face','hand','light',
'camera','materials','materials )
如何在python中从这两个元组中创建一个字典(键列表的第二部分将重复这些值)?
到目前为止,我的解决方案是将值加倍,像这样validvalues += validvalues
validdict = dict( zip( validexts, validvalues ) )
我想知道是否有更python化的方法。
这里的规范方式是itertools.cycle
:
from itertools import cycle
dict(zip(validexts, cycle(validvalues)))
输出:
{'.pz3': 'scene',
'.cr2': 'character',
'.pz2': 'pose',
'.pp2': 'props',
'.hr2': 'hair',
'.fc2': 'face',
'.hd2': 'hand',
'.lt2': 'light',
'.cm2': 'camera',
'.mt5': 'materials',
'.mc6': 'materials',
'.pzz': 'scene',
'.crz': 'character',
'.p2z': 'pose',
'.ppz': 'props',
'.hrz': 'hair',
'.fcz': 'face',
'.hdz': 'hand',
'.ltz': 'light',
'.cmz': 'camera',
'.mz5': 'materials',
'.mcz': 'materials'}
如文档中所述,cycle
无限地重复可迭代对象:
创建一个迭代器,从可迭代对象中返回元素并保存每个元素的副本。当iterable用完时,返回保存副本中的元素。重复下去。
你可以用
from itertools import chain
validdict = dict( zip( validexts, chain(validvalues, validvalues) ) )
这将不会复制validvalues
元组。