我觉得这是一些基本的东西,但不知何故我不明白。我想循环一个列表并将所有人员附加到同一 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/