2016-05-23 4 views
0

Вот моя проблема.python list в dict

У меня есть список, как это (из текстового файла я уже присвоенного элемента списка):

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

Привет, Рори, я пробовал предлагаемые решения, такие как импорт данных другим способом, 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 Endo International PLC

WDC Western Digital Corp

VIAB Viacom Inc.

FRA: БРК Deutsche Bank AG

AAL American Airlines Group Inc.

DLTR Dollar Tree Inc.

BBBY Bed Bath & Beyond Inc.

VRTX Vertex Pharmaceuticals Incorporated

SWKS Skyworks So lutions Inc.

NCLH Norwegian Cruise Line Holdings Ltd

ROST Ross Stores Inc.

FRA: DAI Daimler AG

FRA: Предприятию Fresenius Medical Care AG & Co.KGaA

BIDU Baidu Inc (ADR)

Смежные вопросы