Список к словарю - улучшение? - PullRequest
1 голос
/ 22 марта 2019

Следующий код делает то, что я хочу, но есть ли другой способ сделать это в стиле Python?

Имея файл в формате:

key1:value1,key2:value2,...
key21:value21,key22:value22,...
.
EOF

и код:

file = open(fileName, 'r')
for lines in file:
    line = lines.split(",")
    my_dict = {}
    for item in line:
        key_value = item.split(":")
        my_dict.update({key_value[0]:key_value[1]})

Спасибо

Ответы [ 2 ]

4 голосов
/ 22 марта 2019

Более быстрый и более питонический способ - использовать модуль csv (запятые по умолчанию разделены) и разбивать элементы в генераторе с двойным уплощением, передаваемом в dict, который принимает кортежи с 2 элементами:

import csv
with open("test.csv",newline="") as f:  # replace ,newline="" by ,"rb" in python 2
    cr = csv.reader(f)
    d = dict(x.split(":") for row in cr for x in row)

print(d)

результат:

{'key1': 'value1', 'key22': 'value22', 'key21': 'value21', 'key2': 'value2'}

версия не в формате csv:

import csv
with open("test.csv") as f:
    d = dict(x.split(":") for line in f for x in line.split(","))
1 голос
/ 22 марта 2019

Использование split():

list.txt:

key1:value1,key2:value2,key3:value3
key21:value21,key22:value22

Следовательно

with open("list.txt") as fileObj:
    content = fileObj.readlines()
    # you may also want to remove empty lines
    content = [l.strip() for l in content if l.strip()]

    for line in content:
        for elem in line.split(","):
            print({elem .split(":")[0] : elem.split(":")[1]})

OUTPUT

{'key1': 'value1'}
{'key2': 'value2'}
{'key3': 'value3'}
{'key21': 'value21'}
{'key22': 'value22'}

OR

Если вы хотите, чтобы они хранились в диктанте:

for line in content:
    for x in line.split(","):
        dict_.update({x.split(":")[0] : x.split(":")[1]})

print(dict_['key1'])    # value1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...