2016-05-23 132 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)