Как превратить файл в словарь? - PullRequest
0 голосов
/ 29 апреля 2020

У меня проблемы с попыткой перевести мой файл в словарь с несколькими значениями

bench,103,222,32
table,833,99,23
chair,83,22,882

Мой код пока что

sol={}
infile= open("furniture.dat","r")
for line in infile:
     key,value=line.split(",")

Я пытаюсь получить слова в качестве ключей и числа в качестве значения для словаря, но получая ошибку на split ()

Ответы [ 4 ]

0 голосов
/ 29 апреля 2020

Использование zip и сплайсинга списка :

my_dict = {}
with open('furniture.dat', 'r') as f:
    for line in f.readlines():
        line_list = line.split(',')
        new_dict = dict(zip(line_list, [(line_list[1:])]))
        my_dict.update(new_dict)
print(my_dict)

Выходной словарь: {'bench': ['103', '222', '32'], 'table': ['833', '99', '23'], 'chair': ['83', '22', '882']}

0 голосов
/ 29 апреля 2020

Ну, это подтверждение концепции:

data = "Bench,2750,3000,2880 Chair,46,70,57 Table,147,152,150"
dic = {}
data = ",".join(data.split(" ")).split(",") #This gets rid of spaces,
#                                            puts commas there and than
#                                            splits everyting up again
print(data)
r,tmp = 1,[]
for i in data:
    if i[0].isalpha():
        if r == 1:
            temp = i
            r = 0
        else:
            dic[temp] = ",".join(tmp.copy())
            temp = i
            tmp.clear()
            r = 0
    else:
        r = 0
        tmp.append(i)
print(dic)

Этот код можно сделать намного лучше, но это то, что я придумал.

0 голосов
/ 29 апреля 2020

Исходя из комментария 0x5453, попробуйте этот код:

#!/usr/bin/env python3 
sol={}
infile= open("furniture.dat","r")
for line in infile:
     key,*value=line.rstrip().split(",")
     print(f"key = {key},  value = {value}") 
     sol[ key ] = value

Я добавил python3 верхний шебанг (поскольку функция распаковки доступна только в python3, которую я только что наблюдал) и rstrip () для удаления новой строки из последнего элемента. Я также оставил здесь свой код отладки, чтобы вы могли просмотреть результаты.

Я также добавил строку кода для заполнения вашего словаря.

0 голосов
/ 29 апреля 2020

Во-первых, for line in infile будет читать каждую строку файла как строку.

Во-вторых, вы получаете ошибку, потому что split(",") будет разделять строку на разные элементы везде, где есть запятая (","), а затем возвращайте эти элементы отдельно.

В вашем случае для первой строки будет возвращено "Bench" "2750" "3000" "2880", то есть 4 элемента, в то время как вы написан только код для хранения их с 2 переменными.

В качестве альтернативы, вы можете сделать что-то вроде:

res = line.split(",")  # split returns list with items: ["Bench", "2750", "3000", "2880"]
key, value = res[0], res[1:]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...