我觉得这是基本的东西,但不知怎的,我不明白。我想循环一个列表并将所有人追加到相同的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)
这需要很长时间。我试图创建一个带有id的字典然后以某种方式组合它,但字典只使用相同的id一次(可能是我做了一些不像我应该做的那样)。现在我正在考虑使用while循环。虽然id仍然是相同的追加者。但是,如果必须如此,那么很容易理解如何做到这一点,例如,当id小于25时。但在这种情况下"虽然它是相同的"我不知道该怎么做。任何想法都非常感激。
答案 0 :(得分:4)
您可以将它们组合在一个字典中。
鉴于
lists = [[1, 'Smith'],
[1, 'Black'],
[1, 'Mueller'],
[2, 'Green'],
[2, 'Adams'] ]
DO
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
result
包含
[[1, 'Smith', 'Black', 'Mueller'], [2, 'Green', 'Adams']]