0

以下のコードから得られるこの結果は間違っています。

[
'199|4|11|GDSPV', 
'199|4|11|GDSPV|199|16|82|GDSPV', 
'199|4|11|GDSPV|199|16|82|GDSPV|205|16|82|GDSPV'
]

結果をfrリストと同じにしたかったのですが、メールを辞書dの値に置き換えました。なぜこれが期待どおりに機能しないのか、私は完全に迷っていますか?

fr = [
'7@comp1.COM|4|11|GDSPV',
'7@comp1.COM|16|82|GDSPV',
'13@comp1.COM|16|82|GDSPV'
]

d= {
'7@comp1.COM': '199',
'8@comp4.COM': '200',
'13@comp1.COM': '205'
}


col_list=[]
line_list=[]

for line in fr:
    columns = line.split("|")
    for col in columns:
        if col==columns[0]:
            col_list.append(d[col])
            continue
        col_list.append(col)
        #i = i + 1
    line_list.append("|".join(col_list))
print line_list
4

4 に答える 4

1

各行の処理を開始するときに、col_list をリセットする必要があります。col_list=[]つまり、コールを直前に置くfor col in columns:

于 2012-11-27T04:22:42.747 に答える
1

これを試して:

line_list=[]
for line in fr:
    cols = line.split('|')
    key = cols[0]
    cols[0]=d[key]
    line_list.append('|'.join(cols))

print line_list
于 2012-11-27T04:24:03.163 に答える
1

あなたはほとんどそこにいました:

# col_list=[] you don't need this
line_list=[]

for line in fr:
    columns = line.split("|")
    looking_for = columns[0] # this is what we need to search
    if looking_for in d:
        # by default, iterating over a dictionary will return keys
        new_line = d[looking_for]+'|'+'|'.join(columns[1:])
        line_list.append(new_line)
print line_list
于 2012-11-27T04:38:09.360 に答える
0

これを確認してください... sample.pyで

fr = [
'7@comp1.COM|4|11|GDSPV',
'7@comp1.COM|16|82|GDSPV',
'13@comp1.COM|16|82|GDSPV'
]

d= {
'7@comp1.COM': '199',
'8@comp4.COM': '200',
'13@comp1.COM': '205'
}

col_list=[]
line_list=[]

for line in fr:
    columns = line.split("|")
    if d.has_key(columns[0]):
        col_list.append(d[columns[0]])
    else:
        col_list.append(columns[0])
    col_list.extend(columns[1:])
    line_list.append("|".join(col_list))

print line_list

出力

D:\>python sample.py
['199|4|11|GDSPV', '199|4|11|GDSPV|199|16|82|GDSPV', '199|4|11|GDSPV|199|16|82|G
DSPV|205|16|82|GDSPV']
于 2012-11-27T04:37:07.247 に答える