У меня есть .txt
файл со значениями, такими как:
1 3 4
2 5 6
5 7
Я хочу создать словарь так:
1 [3, 4]
2 [5, 6]
5 [7]
Первое число в строке - это ключ, а оставшаяся часть - это значения, которые нужно поместить в список.
Какой самый эффективный способ добиться этого? Я знаю способ итерации с помощью
f = open('data.txt','r')
for i in f:
А затем с помощью условия создать список, а затем добавить это к dict. Но я хочу более аккуратный способ сделать это.
4 ответа
Используйте collections.defaultdict
,
import collections
d = collections.defaultdict(list)
with open('data.txt','r') as fp:
for line in fp:
l = map(int, line.strip().split())
d[l[0]].extend(l[1:])
print(d)
# defaultdict(<type 'list'>, {1: [3, 4], 2: [5, 6], 5: [7]})
Вот опция без импорта и преобразования записей в целые:
testDict = {}
with open('test.txt') as f:
lines = f.readlines()
for line in lines:
line = map(int, line.split(' '))
testDict[line[0]] = list(line[1:])
print testDict # -> {1: [3, 4], 2: [5, 6], 5: [7]}
Вот еще один, более прямой, способ сделать это:
d = {}
with open('somedata.txt', 'rt') as f:
for line in f:
numbers = map(int, line.split())
numbers = list(numbers) # for Python 3
d.setdefault(numbers[0], []).extend(numbers[1:])
print(d) # -> {1: [3, 4], 2: [5, 6], 5: [7]}
Разбейте каждую строку на пару (ключ, значения) и добавьте их к стандартному dict с пустым списком в качестве начального значения
from collections import defaultdict
mydict = defaultdict(list)
for line in f.readlines():
line = [int(item) for item in line.split()]
key, *values = line
mydict[key].extend(values)
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.