python而id是一样的

时间:2016-11-11 15:36:35

标签: 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)

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

1 个答案:

答案 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']]