0

2 つのリストがあります。1 つにはヘッダーがあり、もう 1 つには詳細があります。各項目の前に番号を付けて、どの詳細がヘッダーに属しているかがわかるようにしています。ヘッダーを印刷してから詳細を印刷したい。どうやってやるの?

この例では、数字 (インデックス) ではなく単語を出力したいだけです。

私のコード:

header=  ['1', 'header1', '2', 'header2', '3', 'header3', 4, 'header4']
detail= ['1', 'detailA', '1', 'detailB', '2', 'detailA', '3', 'detailA', '4', 'detailA']


for item1 in header:
    index=item1
    i+=i
    print "Header: ", header[i*2-1]
    for item2 in detail:
        j+=1
        print j
        if item1==item2:
            print "Detail:\n"
            print "     ", detail[j*2-1]
4

2 に答える 2

1

ここで辞書を作成する必要があります。

In [5]: header=  ['1', 'header1', '2', 'header2', '3', 'header3', 4, 'header4']
In [6]: detail= ['1', 'detailA', '1', 'detailB', '2', 'detailA', '3', 'detailA', '4', 'detailA']

In [7]: it=iter(header)                                                        
In [8]: dic={}             #or use collections.defaultdict(list)
                           #to preserve order use collections.OrderedDict()

In [9]: for ind in it:                                                                   
    head=next(it)
    indexes=[i for i,x in enumerate(detail) if x==ind]
    for index in indexes:
        dic.setdefault(head,[]).append(detail[index+1])
   ...:         

In [10]: dic
Out[10]: 
{'header1': ['detailA', 'detailB'],
 'header2': ['detailA'],
 'header3': ['detailA']}
于 2013-02-02T23:59:59.723 に答える
0

リストがサードパーティからのものである場合は、それらをより使いやすいものに変換できます。

header=  ['1', 'header1', '2', 'header2', '3', 'header3', '4', 'header4']
detail= ['1', 'detailA', '1', 'detailB', '2', 'detailA', '3', 'detailA', '4', 'detailA']

header = [ (header [i], header [i + 1] ) for i in range (0, len (header), 2) ]
detail = [ (detail [i], detail [i + 1] ) for i in range (0, len (detail), 2) ]

for k, v in header:
    print ('Header: {}'.format (v) )
    print ('Details:')
    print ('\n'.join (dv for dk, dv in detail if dk == k) )
    print ()

ヘッダー リスト4をに変更しました'4'。ヘッダーの順序を維持するために辞書は使用しません。

于 2013-02-03T04:21:16.797 に答える