2017-10-17 359 views
0

我是一名python大一新生。最近,我遇到了一個非常簡單的question.First,存在具有也就是說,如縮寫字典:python通過搜索字典替換值

{'a':apple,'b':bread,'c':coke} 

此外,還有一個數據幀,其索引{'a','b','c'},我想通過搜索替換指數該dictionary.So結果將是

{'apple','bread','coke'} 

其實,我知道我可以通過訪問每一個item.However使用循環,這種方法可能是可怕的龐大的數據。

所以我想知道是否還有其他有效的方法可以使用?

+0

爲了替換每個你需要訪問每個項目的項目。沒有得到解決。只要確保每個替換操作需要一定的時間(如果你使用set和dict,那麼你很好) – jonatan

+0

蘋果,麪包,可樂是我想要的字符串? – sheldonzy

+0

是的,它們都是絃樂。 – xiyan

回答

0

如果您希望將其替換爲其他東西,則必須訪問每個元素。這裏有一個關於如何在python中實現它的想法。

假設你的數據集看起來是這樣的:

d = {'a':'apple', 'b': 'bread', 'c':'coke'} 
l = ['a', 'b', 'c'] 

你可以做這樣的事情使用列表理解:

# look in the dictionary for the value, 
# if it's there replace with the value, else let it be there as it is 

l = [d[e] if e in d else e for e in l] 

或使用地圖:

l = map(lambda e: d[e] if e in d else e, l) 
0

我不認爲有一種方法可以在不迭代元素的情況下替換值,但是如果你想保留你的代碼簡單,你可以嘗試這樣的事:

dict1 = {'a': 'apple','b': 'bread' ,'c':'coke'} 
auxList = ['a', 'b', 'c'] 

auxList = [dict1.get(elem) for elem in auxList] 

print(auxList) 

結果是:

['apple', 'bread', 'coke'] 

,或者你可以嘗試:

auxList = list(map(lambda elem: dict1.get(elem), auxList)) 

結果將再次爲:

['apple', 'bread', 'coke'] 
0

回答熊貓的DataFrame -

import pandas as pd 

a = ['a','b','c'] 
b = [[1,2,3],[4,5,6],[7,8,9]] 
df = pd.DataFrame(index=a, data=b) 
dic = {'a':'apple','b':'bread','c':'coke'} 
df 
    0 1 2 
a 1 2 3 
b 4 5 6 
c 7 8 9 

通過數據框指數獲取字典值:

[dic.get(a) for a in df.index] 
['apple', 'bread', 'coke'] 

SET指數:

df.set_index(keys=[[dic.get(a) for a in df.index]], inplace=True) 
df 
     0 1 2 
apple 1 2 3 
bread 4 5 6 
coke 7 8 9