Zip два списка строк для использования в качестве ключей в словаре - PullRequest
0 голосов
/ 13 октября 2018

У меня есть текстовый файл с примерно тридцатью строками:

F2(g)+2e–|2F–(aq)|+2.87
Co3+(aq)+e–|Co2+(aq)|+1.82

Я разделил строки на '|'создать три отдельных списка, но я хочу объединить списки left и right и использовать сжатый список в качестве ключа в словаре, а третий список в качестве значений.Это мой текущий код:

infile = open('myfile.txt', 'r')
lines = infile.readlines()
infile.close()
data = {}

for line in lines[1:]:
    left, right, value = line.rstrip('\n').split('|')
    z = [str(x[0]) + x[1] for x in zip(left, right)] 
    data[z]=value

Это не работает.Когда я пытаюсь сжать left и right до z, я получаю результат, подобный следующему:

['F2', '2F', '(–', 'g(', ')a', '+q', '2)']
['CC', 'oo', '32', '++', '((', 'aa', 'qq', '))']

Что я пытаюсь сделать, это следующий вывод:

{
    'F2(g)+2e– 2F–(aq)': '+2.87',
    'Co3+(aq)+e– Co2+(aq)': '+1.82'
}

1 Ответ

0 голосов
/ 13 октября 2018

У вас нет списков, у вас есть строки, так как вы обрабатываете одну строку из вашего входного файла за раз.Тогда ваша ошибка - использовать zip() в строках left и right.Вы не хотите соединять символы двух строк, вы просто хотите объединить строки с пробелом между ними.

Вы можете использовать + или ' '.join() или только для двух значений используйте форматирование строки:

for line in lines[1:]:
    left, right, value = line.rstrip('\n').split('|')
    z = f'{left} {right}'
    data[z] = value
...