1

私はこのようなリストを持っています

mylist = [student_number , student_age , student_marks , subject_name , subject_marks, subject_date , ass_name , ass_number]

私は何かが欲しい

   list_student = [student_number , student_age , student_marks]
   list_subject = [subject_name , subject_marks, subject_date]
   list_ass     = [ass_name , ass_number]

アンダースコアが辞書のキーとして配置される前のテキストと一致するように

それを辞書に変換して、次のようなものにアクセスできるようにしたい

 for a AllList['student']:
           Student stuff

EDIT:リスト要素は任意の順序にすることができます

4

3 に答える 3

2

私は次のようにします:

# Build dictionary with prefix:list pairs
targets = {
    'student_': [],
    'subject_': [],
    'ass_': []
}

for i in mylist:
    # Try to find matching prefix
    for prefix in targets:
        if i.startswith(prefix):
            targets[prefix].append(i)
            break

これにより、さらに多くのプレフィックスを簡単に追加でき、順序は気にしません。

仮定 (値が文字列であること):

mylist = ['student_number', 'student_age', 'student_marks', 'subject_name',
          'subject_marks', 'subject_date' , 'ass_name' , 'ass_number' ]

次のような結果が得られます。

>>> for i in targets: print( i, targets[i])
...
ass_ ['ass_name', 'ass_number']
student_ ['student_number', 'student_age', 'student_marks']
subject_ ['subject_name', 'subject_marks', 'subject_date']
于 2013-04-19T08:19:00.797 に答える
1

別の方法として、 collections.defaultdictを使用できます。

from collections import defaultdict

mylist = ['student_number', 'student_age', 'student_marks', 'subject_name',
      'subject_marks', 'subject_date' , 'ass_name' , 'ass_number' ]


d = defaultdict(list)
for v in myList:
    k = v.split('_')[0]
    d[k].append(v)

それはあなたに与えるでしょう:

>>>print d
defaultdict(<type 'list'>, {'ass': ['ass_name', 'ass_number'], 'student': ['student_number', 'student_age', 'student_marks'], 'subject': ['subject_name', 'subject_marks', 'subject_date']})
于 2013-04-19T08:33:50.280 に答える
0

これが私の解決策です:

>>> mylist = ['student_number', 'student_age', 'student_marks', 'subject_name',
...           'subject_marks', 'subject_date' , 'ass_name' , 'ass_number' ]
>>> import itertools
>>> m = {k:list(v) for k,v in itertools.groupby(mylist, lambda s: s.split('_')[0])}
>>> m
{'ass': ['ass_name', 'ass_number'], 'student': ['student_number', 'student_age', 'student_marks'], '
subject': ['subject_name', 'subject_marks', 'subject_date']}
于 2013-04-19T08:51:14.600 に答える