python 当 id 相同时做某事

标签 python while-loop

我觉得这是一些基本的东西,但不知何故我不明白。我想循环一个列表并将所有人员附加到同一 ID。或者写入文件,都没有关系。

[1, 'Smith']
[1, 'Black']
[1, 'Mueller']
[2, 'Green']
[2, 'Adams']

[1; 'Smith', 'Black', 'Mueller']
[2; 'Green', 'Adams']

首先,我创建了所有 id 的列表,然后我有两个这样的 for 循环:

final_doc = []
for id in all_ids:
    persons = []
    for line in doc:
        if line[0] == id:
            persons.append(line[1])
    final_doc.append(id, persons)

这需要很长时间。我试图用 ids 创建一个字典,然后以某种方式将其组合起来,但字典只使用相同的 id 一次(可能是我做了一些不应该做的事情)。现在我正在考虑使用 while 循环。而 id 仍然是相同的追加人员。但是,如果必须这样做,例如,当 id 小于 25 时,如何做到这一点很容易理解。但在“当它相同”的情况下,我不知道该怎么做。任何想法都非常感激。

最佳答案

您可以将它们分组到字典中。

给定

lists = [[1, 'Smith'],
         [1, 'Black'],
         [1, 'Mueller'],
         [2, 'Green'],
         [2, 'Adams'] ]

d = {}
for person_id, name in lists:
    d.setdefault(person_id, []).append(name)

d 现在包含

{1: ['Smith', 'Black', 'Mueller'], 2: ['Green', 'Adams']}

注意:

d.setdefault(person_id, []).append(name)

的快捷方式
if person_id not in d:
    d[person_id] = []
d[person_id].append(name)

如果您希望答案是一个列表列表,其中 person_id 作为列表中的第一项(如您的问题所暗示),请将代码更改为

d = {}
for person_id, name in lists:
    d.setdefault(person_id, [person_id]).append(name) # note [person_id] default
result = list(d.values()) # omit call to list if on Python 2.x

结果包含

[[1, 'Smith', 'Black', 'Mueller'], [2, 'Green', 'Adams']]

关于python 当 id 相同时做某事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40551268/

相关文章:

python - Tensorflow - 断言失败 : [predictions must be in [0, 1]]

python - 为什么 'end' 仍然添加到列表中?

php - 使用 PHP SQL 在数据库中查找特定值

python - 在 Maya API 中将多边形壳分离为单独的网格

python - 如何通过多对多字段的模型进行过滤?

python - 为什么 python 中的 pyav 包无法识别 h264_cuvid 编解码器,而 ffmpeg 可以?

php - 在 mysqli 准备语句中循环时

php - 使用 MySQL 查询在 PHP 中列出所有社区成员

java - 为什么我的程序在条件为假时进入 while 循环?

python - 如何使用 Django ORM 在没有数百个查询的情况下选择多对一?