Создание словаря со списком списков в Python

У меня огромный файл (около 200 тыс. Входов). Входы представлены в форме:

ABCD BEF CABD D 

Я читаю этот файл и сохраняю его в списке следующим образом:

 text = f.read().split('\n') 

Это разделяет файл всякий раз, когда видит новую строку. Следовательно, текст выглядит следующим образом:

 [[ABCD] [BEF] [CABD] [D]] 

Теперь я должен хранить эти значения в словаре, где значения ключа являются первым элементом из каждого списка. т.е. клавиши будут A, B, C, D. Мне сложно вводить значения в качестве остальных элементов списка. т.е. словарь должен выглядеть так:

 {A: [BCD]; B: [EF]; C: [ABD]; D: []} 

Я сделал следующее:

  inlinkDict = {} for doc in text: adoc= doc.split(' ') docid = adoc[0] inlinkDict[docid] = inlinkDict.get(docid,0) + {I do not understand what to put in here} 

Пожалуйста, помогите, как мне добавить значения в словарь. Он должен быть 0, если в списке нет элементов, кроме тех, которые будут ключевым значением. Как в примере для 0.

3 Solutions collect form web for “Создание словаря со списком списков в Python”

Попробуйте использовать срез:

 inlinkDict[docid] = adoc[1:] 

Это даст вам пустой список вместо 0 для случая, когда только значение ключа находится в строке. Чтобы получить 0, вы можете использовать условное назначение:

 inlinkDict[docid] = adoc[1:] if adoc[1:] else 0 

Простой способ с пониманием диктата:

 >>> with open('/tmp/spam.txt') as f: ... data = [line.strip().split() for line in f.readlines()] ... >>> {d[0]: d[1:] for d in data} {'A': ['B', 'C', 'D'], 'C': ['A', 'B', 'D'], 'B': ['E', 'F'], 'D': []} >>> {d[0]: ' '.join(d[1:]) if d[1:] else 0 for d in data} {'A': 'BC D', 'C': 'AB D', 'B': 'E F', 'D': 0} 

Примечание: ключи dict должны быть уникальными, поэтому, если у вас есть, скажем, две строки, начинающиеся с «C», первый будет переписан.

Понимание словаря делает короткую работу по этой задаче:

 >>> s = [['A','B','C','D'], ['B','E','F'], ['C','A','B','D'], ['D']] >>> {t[0]:t[1:] for t in s} {'A': ['B', 'C', 'D'], 'C': ['A', 'B', 'D'], 'B': ['E', 'F'], 'D': []} 

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

Альтернативный подход с использованием defaultdict , доступный из Python 2.4, решает следующее:

 from collections import defaultdict d = defaultdict(list) with open('/tmp/spam.txt') as f: for line in f: parts = line.strip().split() d[parts[0]] += parts[1:] 

Входные данные:

 ABCD
 BEF
 CABD
 DCHIJ

Результат:

 >>> d = defaultdict(list) >>> with open('/tmp/spam.txt') as f: ... for line in f: ... parts = line.strip().split() ... d[parts[0]] += parts[1:] ... >>> d['C'] ['A', 'B', 'D', 'H', 'I', 'J'] 
  • Как вернуть два значения из функции в Python?
  • Невозможно изменить элементы списка в цикле Python
  • разделение словаря на python на ключи и значения
  • Как печатать ключи и значения словаря, который содержится в списке в Python
  • Python - найти индекс элемента в списке списков
  • Как создать перестановки списка без «движущихся» нулей. в Python
  • Создать случайный список целых чисел в Python
  • TypeError: unhashable type: 'list' при использовании встроенной функции set
  • Преобразование словаря Python в список
  • Python объединяет несколько списков с пересечением
  • суммировать список чисел в Python
  • Python - лучший язык программирования в мире.