【问题标题】:How to iterate through a nested list in python?如何遍历python中的嵌套列表?
【发布时间】:2025-11-28 00:00:01
【问题描述】:

我想遍历一个包含很多字典的列表。我试图迭代的 json 响应看起来像这样:

user 1 JSON response:
[
 {
 "id": "333",
 "name": "hello"
 },
 {
 "id": "999",
 "name": "hi"
 },
 {
 "id": "666",
 "name": "abc"
 },
]

user 2 JSON response:
[
 {
 "id": "555",
 "name": "hello"
 },
 {
 "id": "1001",
 "name": "hi"
 },
 {
 "id": "26236",
 "name": "abc"
 },
]

这不是实际的 JSON 响应,但结构相同。我要做的是找到一个特定的id 并将其存储在一个变量中。我尝试迭代的 JSON 响应没有组织,并且每次都根据用户而变化。所以我需要找到具体的id,这很容易,但列表中有很多字典。我试过这样迭代:

    for guild_info in guilds:
        for guild_ids in guild_info: 

这将返回第一个字典,即 id: 333。例如,我想找到值 666 并将其存储在变量中。我该怎么做?

【问题讨论】:

  • 您说您需要“找到一个特定的id 并将其存储在一个变量中”。大概您已经知道id,这就是您要搜索的内容。您是否希望将变量分配给相应的name?此外,您是否需要遍历多个用户列表,或者一次只需要一个? (换句话说,每个用户都是一个字典列表。您实际上有一个字典列表列表吗?)

标签: python python-3.x list


【解决方案1】:

你有一个字典列表。

当您运行for guild_info in guilds: 时,您将遍历字典,因此这里每个guild_info 将是一个字典。因此只需像这样获取密钥idguild_info['id']

如果你想做的是找到与特定id对应的name,你可以使用列表推导并取其第一个元素,如下所示:

name = [x['name'] for x in guilds if x['id'] == '666'][0]

【讨论】:

  • 这个列表理解的唯一缺点是即使找到匹配项,它也会继续搜索所有用户的公会。不过,性能方面可能没什么好担心的,除非你有一大堆用户和/或公会需要处理。
  • 如果没有匹配到,它也会抛出一个IndexError
  • 基于this answer,您的解决方案可以稍作修改以避免这两个问题:name = next((x['name'] for x in guilds if x['id'] == '666'), None)。或者,如果确定总会有匹配项,则可以简化为 name = next(x['name'] for x in guilds if x['id'] == '666')
【解决方案2】:

这是一个函数,它只会搜索直到找到匹配的id,然后返回,这样可以避免不必要地检查更多条目。

def get_name_for_id(user, id_to_find):
    # user is a list, and each guild in it is a dictionary.
    for guild in user:
        if guild['id'] == id_to_find:
            # Once the matching id is found, we're done.
            return guild['name']

    # If the loop completes without returning, then there was no match.
    return None

user = [
    {
        "id": "333",
        "name": "hello"
    },
    {
        "id": "999",
        "name": "hi"
    },
    {
        "id": "666",
        "name": "abc"
    },
]

name = get_name_for_id(user, '666')
print(name)
name2 = get_name_for_id(user, '10000')
print(name2)

输出:

abc
None

【讨论】:

    【解决方案3】:

    这将创建一个循环,该循环将迭代到字典列表。如果您正在寻找简单的方法

    for every_dictionary in List_of_dictionary:
        for every_dictionary_item in every_dictionary.keys():
            print(every_dictionary[every_dictionary_item])
    

    【讨论】:

      最近更新 更多