Согласно Методы Файловых Объектов , самый простой способ конвертировать текстовый файл в list
:
with open('file.txt') as f:
my_list = list(f)
Старый ответ:
Использование with
и readlines()
:
with open('file.txt') as f:
lines = f.readlines()
Если вам не нужно закрывать файл, эта однострочная работа работает:
lines = open('file.txt').readlines()
традиционный способ:
f = open('file.txt') # Open file on read mode
lines = f.read().split("\n") # Create a list containing all lines
f.close() # Close file
Используйте ] dict.fromkeys
:
>>> my_list = [1, 2, 3]
>>> dict.fromkeys(my_list)
{1: None, 2: None, 3: None}
Значения по умолчанию равны Нет
, но вы можете указать их как необязательный аргумент:
>>> my_list = [1, 2, 3]
>>> dict.fromkeys(my_list, 0)
{1: 0, 2: 0, 3: 0}
Из документации:
a.fromkeys (seq [, словарь с ключами из seq и значения установлены в значение.
dict.fromkeys - это метод класса, возвращает новый словарь. стоимость по умолчанию - Нет. Новое в версии 2.3.
Вы можете использовать набор вместо dict:
>>> myList=['a','b','c','d']
>>> set(myList)
set(['a', 'c', 'b', 'd'])
Это лучше, если вам никогда не нужно хранить значения и они просто хранит неупорядоченную коллекцию уникальных предметов.
Вы можете использовать понимание списка:
my_list = ['a','b','c','d']
my_dict = dict([(ele, None) for ele in my_list])
Чтобы ответить на беспокойство исходного вопроса о производительности (для поиска в dict
vs set
), как ни странно, dict
lookups может быть на минуту быстрее (в Python 2.5.1 на моем довольно медленном ноутбуке), например, при условии, что половина поисков не удалась, а половина - успешно. Вот как это происходит:
$ python -mtimeit -s'k=dict.fromkeys(range(99))' '5 in k and 112 in k'
1000000 loops, best of 3: 0.236 usec per loop
$ python -mtimeit -s'k=set(range(99))' '5 in k and 112 in k'
1000000 loops, best of 3: 0.265 usec per loop
каждая проверка выполняется несколько раз, чтобы убедиться, что они повторяемы. Так что, если эти 30 наносекунд или меньше на медленном ноутбуке являются абсолютно критическим узким местом, возможно, стоит обратиться к неясному dict.fromkeys
решению, а не к простому, очевидному, удобочитаемому и явно правильному set
(необычно - почти всегда в Python простое и прямое решение также имеет преимущества в производительности).
Конечно,
А вот довольно неправильный и неэффективный способ сделать это с помощью карты:
>>> d = dict()
>>> map (lambda x: d.__setitem__(x, None), [1,2,3])
[None, None, None]
>>> d
{1: None, 2: None, 3: None}
Может быть, вы можете использовать itertools:
>>>import itertools
>>>my_list = ['a','b','c','d']
>>>d = {}
>>>for x in itertools.imap(d.setdefault, my_list): pass
>>>print d
{'a': None, 'c': None, 'b': None, 'd': None}
Для больших списков, может быть, это очень хорошо: P