2016-05-23 127 views
0

這是我的問題。python list into dict

我有一個這樣的名單(出一個txt文件我已經分配到一個列表元素):

sharenames = ['VIAB:Viacom Inc.', 'DLTR:Dollar Tree Inc.', 'AAL:American Airlines Group Inc.', 'ROST:Ross Stores Inc.', 'VRTX:Vertex Pharmaceuticals Incorporated', 'WDC:Western Digital Corp', 'NCLH:Norwegian Cruise Line Holdings Ltd', 'SWKS:Skyworks Solutions Inc.', 'BBBY:Bed Bath & Beyond Inc.', 'BIDU:Baidu Inc (ADR)', 'ENDP:Endo International plc', '"FRA:DBK":Deutsche Bank AG', '"FRA:FME":Fresenius Medical Care AG & Co. KGaA', '"FRA:DAI":Daimler AG'] 

我想創建一個字典我可以訪問像

wertA = sharenames["FRA:FME"] # as an example 
訪問

wertA = sharenames[ROST] # as an example 

嘗試和錯誤的幾個小時後,我希望你能幫助我。

+1

您需要清楚列表的格式。對於列表中的每個字符串,最後一個冒號前面的所有內容都是縮寫,並且最後一個冒號後的所有內容都是全名,這是真的嗎?你想把縮寫詞作爲詞典中的鍵和全名作爲值嗎?最後,請告訴我們至少有一件事情是在嘗試和錯誤的「幾個小時」後嘗試的。 –

+0

您應該先清理數據。你怎麼得到的?雙引號使正確解析列表更加困難。 –

+0

嗨Rory,我嘗試了建議的解決方案,像導入另一種方式的數據,JSON等,但由於我是python的新手,這需要一些時間。 – theamokdog

回答

0

您可以從一個元組列表創建映射:

data = ['VIAB:Viacom Inc.', 'DLTR:Dollar Tree Inc.', 'AAL:American Airlines Group Inc.', 'ROST:Ross Stores Inc.', 'VRTX:Vertex Pharmaceuticals Incorporated', 'WDC:Western Digital Corp', 'NCLH:Norwegian Cruise Line Holdings Ltd', 'SWKS:Skyworks Solutions Inc.', 'BBBY:Bed Bath & Beyond Inc.', 'BIDU:Baidu Inc (ADR)', 'ENDP:Endo International plc', '"FRA:DBK":Deutsche Bank AG', '"FRA:FME":Fresenius Medical Care AG & Co. KGaA', '"FRA:DAI":Daimler AG'] 
mapping = dict(entry.rsplit(':', 1) for entry in data) 

通知我使用string.rsplit最大單分裂(第二個參數)的。此外,這假定你的值沒有冒號。

項目中映射:

ENDP -> Endo International plc 
WDC -> Western Digital Corp 
VIAB -> Viacom Inc. 
AAL -> American Airlines Group Inc. 
DLTR -> Dollar Tree Inc. 
BBBY -> Bed Bath & Beyond Inc. 
"FRA:DAI" -> Daimler AG 
VRTX -> Vertex Pharmaceuticals Incorporated 
"FRA:FME" -> Fresenius Medical Care AG & Co. KGaA 
SWKS -> Skyworks Solutions Inc. 
NCLH -> Norwegian Cruise Line Holdings Ltd 
ROST -> Ross Stores Inc. 
"FRA:DBK" -> Deutsche Bank AG 
BIDU -> Baidu Inc (ADR) 

清潔從雙引號鍵,你可以這樣做:

clean_mapping = {k.replace('"',''): v for k, v in mapping} 
+0

這是否適用於具有多個冒號的列表項,例如'FRA:DBK'? –

+0

我得到一個FRA鍵' – alecxe

0

你需要每一個項目在分裂 「:」。下面的代碼使所需的詞典:

sharenames = {} 
for item in lst: 
    sharenames[":".join(item.split(":")[:-1])] = item.split(":")[-1] 

例子:sharenames["ENDP"] >>> 'Endo International plc'

+0

這是否適用於有多個冒號的字符串,例如開始'FRA:FME'的字符串? –

+0

我編輯了它,只要全名中沒有冒號 –

0

這可能會做你想要什麼:

sharenames = ['VIAB:Viacom Inc.', 'DLTR:Dollar Tree Inc.', 'AAL:American Airlines Group Inc.', 'ROST:Ross Stores Inc.', 'VRTX:Vertex Pharmaceuticals Incorporated', 'WDC:Western Digital Corp', 'NCLH:Norwegian Cruise Line Holdings Ltd', 'SWKS:Skyworks Solutions Inc.', 'BBBY:Bed Bath & Beyond Inc.', 'BIDU:Baidu Inc (ADR)', 'ENDP:Endo International plc', '"FRA:DBK":Deutsche Bank AG', '"FRA:FME":Fresenius Medical Care AG & Co. KGaA', '"FRA:DAI":Daimler AG'] 

# Conversions; 
sharenames = (sharename.rsplit(':',1) for sharename in sharenames) 
sharenames = ((sharename[0].strip('"'),sharename[1]) for sharename in sharenames) 
sharenames = dict(sharenames) 

print sharenames['ROST'] 
print sharenames["FRA:FME"] 
0
d = {} 
for e in sharenames: 
    t = tuple(string.rsplit(e,':', 1)) 
    d[re.sub('\"','',t[0])] = t[1] 

for k,v in d.iteritems(): 
    print k,v 

ENDP遠藤國際股份有限公司

WDC西部數據Corp

VIAB維亞康姆公司

FRA:DBK德意志銀行

AAL美國航空集團公司

DLTR美元樹公司

BBBY浴牀&超越公司

VRTX Vertex Pharmaceuticals Incorporated

SWKS Skyworks So lutions公司

NCLH挪威郵輪控股有限公司

ROST羅斯百貨有限公司

FRA:DAI戴姆勒

FRA:FME費森尤斯醫藥AG &有限公司KGaA

BIDU百度公司(ADR)