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

Я работаю, отделяя значения и ключи от файла. Так что, если слово существует в файле, добавьте значение в список.Может быть, более эффективно использовать словарь и добавлять значения и ключи?В text.txt выглядит так:

eggs=2, bread=1, milk=4 
eggs=5, bread=2, milk=2
eggs=1, bread=3, milk=3

Я хочу разделить значения и ключи в отдельные списки, чтобы позже я мог использовать это для вычисления количества яиц и т. Д.

 egg_list =[]     
with open("text.txt") as f: 
     for line in f:
        lines = f.read().splitlines()# creates a list of the file
        lines.split("=") # or split on ","?
        if "eggs" in line: # checks if the string "eggs" exists in the list
           #if so add the value after"=" into the list
           egg_list.append(lines[0]+1)#should list 2,5,1
        if "bread" #same for bread ect

Ответы [ 2 ]

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

Вы можете прочитать файл в виде списков со сложным пониманием:

{g[0][0]: [v for _, v in g] for g in zip(*([t.split('=') for t in l.split(', ')] for l in f))}

, так что, учитывая ваш пример ввода из файлового объекта f, приведенное выше вернет:

{'eggs': ['2', '5', '1'], 'bread': ['1', '2', '3'], 'milk': ['4 ', '2', '3']}
0 голосов
/ 06 октября 2018

Мы могли бы использовать itertools.groupby здесь и путем создания списка , который содержит словарей каждой строки

from itertools import groupby

with open('text.txt') as f:
    content = [line.strip('\n ') for line in f]

content = [i.split(',') for i in content]

lista = []
for i in content:
    lista.append(dict([j.split('=') for j in i]))

total_eggs= sum([int(k) for k, g in groupby(lista, key=lambda x: x['eggs'])])

print(lista)
# [{'eggs': '2', ' bread': '1', ' milk': '4'}, {'eggs': '5', ' bread': '2', ' milk': '2'}, {'eggs': '1', ' bread': '3', ' milk': '3'}]
print(total_eggs)
# 8

Другой методздесь можно было бы использовать defaultdict , чтобы настроить некоторые словари, которые будут организованно хранить информацию из текстового файла, где вы сможете получить к ней доступ и что вам будет легче манипулировать в будущем

from collections import defaultdict

with open('text.txt') as f:
    content = [line.strip('\n ') for line in f]

dd = defaultdict()
content = [i.split(',') for i in content]

for i, v in enumerate(content):
    dd[i] = dict([j.split('=') for j in v])

print(dd)
# {0: {'eggs': '2', ' bread': '1', ' milk': '4'}, 1: {'eggs': '5', ' bread': '2', ' milk': '2'}, 2: {'eggs': '1', ' bread': '3', ' milk': '3'}})

print(sum([int(dd[k]['eggs']) for k in dd]))
# 8

Работаметод с keys без значения:

with open('text.txt') as f:
    content = [line.strip('\n ') for line in f]

content = [i.split(',') for i in content]

lista = []
for i in content:
    for j in i:
        if len(j.split('=')) > 1:
            lista.append({j.split('=')[0]: j.split('=')[1]})
        else:
            lista.append({j: 0})

total_eggs = sum([int(v) for i in lista for k, v in i.items() if 'eggs' in k])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...