2012-03-27 107 views
1

我有形式的數據的列表:= 10蟒地圖字典陣列

[line1,a] 
[line2,c] 
[line3,b] 

我想使用一個= 5,C = 15的映射,B:

[line1,5] 
[line2,15] 
[line3,10] 

我想使用此代碼,這是我所知道的是不正確,可以有人指導我如何更好地實現這一目標:

mapping = {"a": 5, "b": 10, "c": 15} 
applyMap = [line[1] = 'a' for line in data] 

感謝

編輯: 就在這裏澄清,一條線,但是我想這個映射出現在文件中的所有行:

輸入:["line1","a"]

輸出:["line1",5]

+1

什麼是預期的輸出嗎? – spicavigo 2012-03-27 08:59:35

+0

請看我的例子,也許我不清楚,第一個形式是數組(字符串,字符串)成爲第二個(映射)形式的(字符串,int) – user1220022 2012-03-27 09:00:29

+0

它是'a'或''a「'in你的第一個代碼示例? – Dogbert 2012-03-27 09:01:34

回答

3

你可以試試與列表理解。

lines = [ 
    ["line1", "much_more_items1", "a"], 
    ["line2", "much_more_items2", "c"], 
    ["line3", "much_more_items3", "b"], 
] 
mapping = {"a": 5, "b": 10, "c": 15} 
# here I assume the key you need to remove is at last position of your items 
result = [ line[0:-1] + [mapping[line[-1]] for line in lines ] 
+0

有沒有辦法做到這一點,而不指定x?我的實際數據有更多的專欄 - 我簡化了它,使我的解釋更加清晰。 – user1220022 2012-03-27 09:06:34

+0

@ user1220022:我更新了我的答案,您的列表項中沒有隻有2個成員的情況。 – 2012-03-27 09:12:33

+0

這正是我之後的事情,我忘記了列表迭代。謝謝! – user1220022 2012-03-27 09:16:29

0
>>> data = [["line1", "a"], ["line2", "b"], ["line3", "c"]] 
>>> mapping = { "a": 5, "b": 10, "c": 15} 
>>> [[line[0], mapping[line[1]]] for line in data] 
[['line1', 5], ['line2', 10], ['line3', 15]] 
+0

同樣,有沒有辦法做到這一點,而不指定列號?我的實際數據有更多的專欄 - 我簡化了它,使我的解釋更加清晰 – user1220022 2012-03-27 09:07:07

+1

@ user1220022您可以在您的問題中發佈您想要的完整輸入/輸出嗎? – Dogbert 2012-03-27 09:08:19

+0

這個輸出是100%正確的,但是在我的實際數據中我有15列。所以我不想這樣做:'[line [0],mapping [line] [1]],line [2],line [3] ...,line [14],line [15]] for line in data]' – user1220022 2012-03-27 09:09:53

1

嘗試是這樣的:

data = [ 
    ['line1', 'a'], 
    ['line2', 'c'], 
    ['line3', 'b'], 
] 

mapping = {"a": 5, "b": 10, "c": 15} 

applyMap = [[line[0], mapping[line[1]]] for line in data] 

print applyMap 
0
lineMap = {'line1': 'a', 'line2': 'b', 'line3': 'c'} 
cha2num = {'a': 5, 'b': 10, 'c': 15} 
result = [[key,cha2num[lineMap[key]]] for key in lineMap] 
print result 

你需要的是一個地圖的相關 'A' - > 5