python嵌套列表操作方法_如何使用Python以有序的方式处理嵌套列表中的字典

To illustrate my dilemma I'll use the following code.

formatted_list = []

nested_list = [

[

['Earth', 'Northern Hemisphere', 'North America', 'The United States of America'],

['California', 'Kentucky', 'Colorado', 'Oregon'],

['Sacramento', 'Frankfurt', 'Denver', 'Salem']

],

[

['Earth', 'Northern Hemisphere', 'North America', 'The United States of America'],

['Florida', 'Kentucky', 'Nevada', 'Oregon'],

['Tallahassee', 'Frankfurt', 'Carson City', 'Salem']

]

]

for values in nested_list:

for global_attributes in values[0]:

formatted_list.append(global_attributes)

for values in nested_list:

formatted_list.append(dict(zip(values[1], values[2])))

print(formatted_list)

Now lets say I'm an alien scout and I'm trying to write a python program that will tell my mothership the location of state capitals using a nested list. ['Earth', 'Northern Hemisphere', 'North America', 'The United States of America'] obviously applies to all states and their capitals. However not every state has the same capital. My current code gives the following:

['Earth', 'Northern Hemisphere', 'North America', 'The United States of America', 'Earth', 'Northern Hemisphere', 'North America', 'The United States of America', {'California': 'Sacramento', 'Kentucky': 'Frankfurt', 'Colorado': 'Denver', 'Oregon': 'Salem'}, {'Florida': 'Tallahassee', 'Kentucky': 'Frankfurt', 'Nevada': 'Carson City', 'Oregon': 'Salem'}]

I've created a dictionary that pairs states with their respective cities withing formatted_list. My question is:

How can I tell python to associate the ['Earth', 'Northern

Hemisphere', 'North America', 'The United States of America'] entry

with the entire dictionary that follows it?

As in is it possible to have an entire list as a key or value within a dictionary? Thanks for your help.

解决方案

Let's assume your nested_list always maintains that structure where the three sublists keep the [[Planet, Hemishpere, Continent, Country], [State/Province1, State/Province2, State/Province3, State/Province4], [Capital1, Capital2, Capital3, Capital4]]. We can use a kind of dirty looking nested try/except system to build a tree structure where each region size is a node. It looks like this:

nested_list = [

[

['Earth', 'Northern Hemisphere', 'North America', 'The United States of America'],

['California', 'Kentucky', 'Colorado', 'Oregon'],

['Sacramento', 'Frankfurt', 'Denver', 'Salem']

],

[

['Earth', 'Northern Hemisphere', 'North America', 'The United States of America'],

['Florida', 'Kentucky', 'Nevada', 'Oregon'],

['Tallahassee', 'Frankfurt', 'Carson City', 'Salem']

]

]

locations = {}

for sub_group in nested_list:

planet = sub_group[0][0]

hemisphere = sub_group[0][1]

continent = sub_group[0][2]

country = sub_group[0][3]

for i in range(len(sub_group[1])):

try:

locations[planet][hemisphere][continent][country]{sub_group[1][i] = sub_group[2][i]

except KeyError:

try:

locations[planet][hemisphere][continent][country] = {}

except KeyError:

try:

locations[planet][hemisphere][continent] = {}

except KeyError:

try:

locations[planet][hemisphere] = {}

except KeyError:

locations[planet] = {}

print(locations)

Note: There may be a way of using nested defaultdicts per this answer instead of the nested try/except.

Note 2: Probably should have done a little more research before posting, but there is a package called nested_dict that looks like it offers a sort of auto-generated default dict. That code would look like:

from nested_dict import nested_dict

nested_list = [

[

['Earth', 'Northern Hemisphere', 'North America', 'The United States of America'],

['California', 'Kentucky', 'Colorado', 'Oregon'],

['Sacramento', 'Frankfurt', 'Denver', 'Salem']

],

[

['Earth', 'Northern Hemisphere', 'North America', 'The United States of America'],

['Florida', 'Kentucky', 'Nevada', 'Oregon'],

['Tallahassee', 'Frankfurt', 'Carson City', 'Salem']

]

]

locations = nested_dict(4, dict)

for sub_group in nested_list:

planet = sub_group[0][0]

hemisphere = sub_group[0][1]

continent = sub_group[0][2]

country = sub_group[0][3]

for i in range(len(sub_group[1])):

locations[planet][hemisphere][continent][country][sub_group[1][i]] = sub_group[2][i]

print(locations.to_dict())

Either way the output looks like: {'Earth': {'Northern Hemisphere': {'North America': {'The United States of America': {'California': 'Sacramento', 'Kentucky': 'Frankfurt', 'Colorado': 'Denver', 'Oregon': 'Salem', 'Florida': 'Tallahassee', 'Nevada': 'Carson City'}}}}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值