2016-11-11 12 views
2

基本的なものだと思うが、どういうわけかそれは得られない。私はリストをループして、すべての人物を同じIDに追加したいと思います。または、ファイルに書き込んでも問題ありません。idは同じものだが何か

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

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

まず、私はすべてのIDのリストを作成しているし、私は、forループ、このような2を持っていた:

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

が含ま: 'ライン[0] = IDがあれば:'割り当てです。私はあなたが平等のためにテストしたいと思います: 'if line [0] == id:'。 –

+0

名前とIDはリストのリストに保存されていますか?つまり[[1、スミス]、[1、ブラック] ...] '? – LMc

+0

@JohnnyMoppはい、確かに、ありがとう! – student

答えて

4

辞書を一緒にグループ化することができます。

が行う

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) 

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 
にあなたが(あなたの質問に暗示される)リストの最初の項目としてPERSON_ID、変更コードを持つリストのリストであるためにあなたの答えを好む場合

if person_id not in d: 
    d[person_id] = [] 
d[person_id].append(name) 

のショートカットです

resultは、一つには

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

素晴らしい!そのような詳細な答えをありがとう! – student

+0

6時間ではなく35秒かかります。それはほとんど怖いです:) – student

+0

@スチューデント:私はあなたのためにうまくいってうれしいです。 –

関連する問題