为了说明我的困境,我将使用以下代码。
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)现在让我说我是一个外星侦察员,我正在尝试编写一个python程序,它会告诉我的母舰使用嵌套列表的州首府的位置。 ['Earth', 'Northern Hemisphere', 'North America', 'The United States of America']显然适用于所有州及其首都。 然而,并非每个州都拥有相同的资本。 我当前的代码给出了以下内容:
['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'}]
我创建了一个字典,通过formatted_list将状态与各自的城市配对。 我的问题是:
我如何告诉python将['Earth', 'Northern Hemisphere', 'North America', 'The United States of America']条目与其后的整个词典联系起来?
因为可以将整个列表作为字典中的键或值吗? 谢谢你的帮助。
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.
最满意答案
让我们假设您的nested_list始终保持三个子列表保持[[Planet, Hemishpere, Continent, Country], [State/Province1, State/Province2, State/Province3, State/Province4], [Capital1, Capital2, Capital3, Capital4]] 。 我们可以使用一种看起来很脏的嵌套try/except系统来构建一个树结构,其中每个区域大小都是一个节点。 它看起来像这样:
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)注意:可能有一种方法可以使用嵌套的默认值来代替嵌套的try/except 。
注意2:在发布之前可能应该做更多的研究,但是有一个名为nested_dict的包看起来像是提供了一种自动生成的默认dict。 该代码看起来像:
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())无论哪种方式,输出看起来像: {'Earth': {'Northern Hemisphere': {'North America': {'The United States of America': {'California': 'Sacramento', 'Kentucky': 'Frankfurt', 'Colorado': 'Denver', 'Oregon': 'Salem', 'Florida': 'Tallahassee', 'Nevada': 'Carson City'}}}}}
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'}}}}}
更多推荐
发布评论