Python 带列表的嵌套dict
我想构建一个以列表为值的dict,其中包含以列表为值的dict:Python 带列表的嵌套dict,python,list,dictionary,Python,List,Dictionary,我想构建一个以列表为值的dict,其中包含以列表为值的dict: xml_dict = { 'Spain':['La Palma':[2929, ..], 'Fuerteventura':[5733, ..]], 'Turkey':['Antalya':[16483, ..], 'Izmir':[2927, ...]] ... } 我的出发点是一份清单,上面写着: self.db_data_list = [ {'land': 'Spain', 'giatahotelcode': 2929,
xml_dict = {
'Spain':['La Palma':[2929, ..], 'Fuerteventura':[5733, ..]],
'Turkey':['Antalya':[16483, ..], 'Izmir':[2927, ...]]
... }
我的出发点是一份清单,上面写着:
self.db_data_list = [
{'land': 'Spain', 'giatahotelcode': 2929, 'zielgebiet_abweichung': 'La Palma'},
{'land': 'Spain', 'giatahotelcode': 5733, 'zielgebiet_abweichung': 'Fuerteventura'},
{'land': 'Turkey', 'giatahotelcode': 16483, 'zielgebiet_abweichung': 'Antalya'},
{'land': 'Turkey', 'giatahotelcode': 2927, 'zielgebiet_abweichung': 'Izmir'}
这是我到目前为止的代码:
zg_giata_dict = dict()
country_zg_dict = dict()
xml_dict = dict()
countries = [ value for data_dict in self.db_data_list for key, value in data_dict.iteritems() if key == 'land' ]
countries = set(countries)
zgs = [ value for data_dict in self.db_data_list for key, value in data_dict.iteritems() if key == 'zielgebiet_abweichung' ]
zgs = set(zgs)
for data_dict in self.db_data_list:
for country in countries:
if data_dict['land'] == country:
country_zg_dict.setdefault(country, []).append(data_dict['zielgebiet_abweichung'])
country_zg_dict[country] = list(set(country_zg_dict[country]))
for data_dict in self.db_data_list:
for zg in zgs:
if data_dict['zielgebiet_abweichung'] == zg:
zg_giata_dict.setdefault(zg, []).append(data_dict['giatahotelcode'])
for country, zg_list in country_zg_dict.iteritems():
for zg, giata_list in zg_giata_dict.iteritems():
if zg in zg_list:
xml_dict.setdefault(country, []).append(giata_list)
输出xml_dict:
{'Spain': [[2929, ...], [5733, ...]], 'Turkey': [[16483, ...], [2927, ...]], ... }
我的输出一点也不差-但是我错过了我的
xml\u dict
中的zielgebiet\u abweichung
(self.db\u data\u list)中的值。我不知道该怎么办。有什么想法吗?我想你真正需要的是一本以字典为值的字典,里面的字典以列表为值
for hotel in self.db_data_list:
land = hotel['land']
town = hotel['zielgebiet_abweichung']
code = hotel['giatahotelcode']
if land in all_data:
if town in all_data[land]:
all_data[land][town].append(code)
else:
all_data[land][town] = [code]
else:
all_data[land] = {town: [code]}
这将返回:
{'Turkey': {'Antalya': [16483], 'Izmir': [2927]},
'Spain': {'Fuerteventura': [5733], 'La Palma': [2929]}}
您也可以使用setdefault
执行相同的操作:
all_data = {}
for hotel in self.db_data_list:
land = all_data.setdefault(hotel['land'], {})
town = land.setdefault(hotel['zielgebiet_abweichung'], [])
town.append(hotel['giatahotelcode'])
您的预期输出--
{'Spain':['La Palma':[2929,…],'Fuerteventura':[5733,…],'Turkey':['Antalya':[16483,…],'Izmir':[2927,…],[Izmir':[2927,…],[/code>不是有效的词典或列表对不起,我的错:xml(dict={'Spanian':[{'La Palma':[2929,…],'Fuerteventura],'Fuertentura':[{'5733,…],'Fuerteventura,…],[{'Turkey':[{5733,…],'Antainta],'[2927,…]}
Nope,那也不行。你不想要一个嵌套的字典,像{'Spain':{'La Palma':[2929,…],'Fuerteventura':[5733,…]},'Turkey':{'Antalya':[16483,…],'Izmir':[2927,…]}
Hmpf,这个很好用。但我还是没有得到它:town=land.setdefault(hotel)['zielgebiet_abweichung'],[])
在我看来,这一行会覆盖land-dict中的键。你能解释一下这一行吗?例如:当我在添加代码之前打印land或town时,它们只是一个空的dict和一个列表。非常感谢你。顺便说一句!list.setdefault(key,default)
返回与键相关的值,如果该键在字典中,或者如果不在字典中,则创建该键并将其值设置为默认值。