📜  Python – 按另一个列表分组子列表(1)

📅  最后修改于: 2023-12-03 15:34:08.678000             🧑  作者: Mango

Python – 按另一个列表分组子列表

有时,我们需要按照另一个列表的某些值来分组主列表中的子列表。在Python中,我们可以使用列表推导式和字典来轻松完成这个任务。

列表推导式

我们可以使用列表推导式来按照另一个列表的值分组子列表。具体步骤如下:

  1. 创建一个字典,用于存储子列表,并将另一个列表中的值作为键。
  2. 遍历主列表中的每个元素,如果该元素的特定值存在于字典中,则将该元素添加到对应的子列表中,否则创建一个新的子列表,并将该元素添加到该新列表中。

下面是一个示例程序:

data = [
    {'name': 'John', 'age': 25, 'city': 'New York'},
    {'name': 'Jane', 'age': 30, 'city': 'Chicago'},
    {'name': 'Tom', 'age': 35, 'city': 'New York'},
    {'name': 'Alice', 'age': 27, 'city': 'Chicago'}
]

# 创建一个字典来存储分组后的子列表
grouped_data = {city: [] for city in {d['city'] for d in data}}

# 遍历主列表中的每个元素,按照城市将其分组
for d in data:
    grouped_data[d['city']].append(d)

# 输出分组后的结果
for city, records in grouped_data.items():
    print(f"{city}:")
    for r in records:
        print(f"    {r}")

输出结果如下:

Chicago:
    {'name': 'Jane', 'age': 30, 'city': 'Chicago'}
    {'name': 'Alice', 'age': 27, 'city': 'Chicago'}
New York:
    {'name': 'John', 'age': 25, 'city': 'New York'}
    {'name': 'Tom', 'age': 35, 'city': 'New York'}
字典

除了列表推导式,我们还可以使用字典来完成上述任务。具体步骤如下:

  1. 创建一个空字典,用于存储分组后的结果。
  2. 遍历主列表中的每个元素,检查该元素的特定值是否存在于字典中,如果存在,则将该元素添加到对应的子列表中,否则创建一个新的子列表,将其添加到字典中,并将该元素添加到新列表中。

下面是一个示例程序:

data = [
    {'name': 'John', 'age': 25, 'city': 'New York'},
    {'name': 'Jane', 'age': 30, 'city': 'Chicago'},
    {'name': 'Tom', 'age': 35, 'city': 'New York'},
    {'name': 'Alice', 'age': 27, 'city': 'Chicago'}
]

grouped_data = {}

for d in data:
    if d['city'] not in grouped_data:
        grouped_data[d['city']] = []
    grouped_data[d['city']].append(d)

# 输出分组后的结果
for city, records in grouped_data.items():
    print(f"{city}:")
    for r in records:
        print(f"    {r}")

输出结果与之前相同。

以上就是按照另一个列表分组子列表的方法。无论使用列表推导式还是字典,都能轻松完成这个任务。