如何使用Python以有序的方式处理嵌套列表中的dicts(How to process dicts within nested lists in an ordered manner with Pyt

编程入门 行业动态 更新时间:2024-10-17 11:33:35
如何使用Python以有序的方式处理嵌套列表中的dicts(How to process dicts within nested lists in an ordered manner with Python)

为了说明我的困境,我将使用以下代码。

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'}}}}}

更多推荐

本文发布于:2023-08-04 10:16:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1415219.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:嵌套   如何使用   方式   列表中   dicts

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!