小编典典

用Python创建带有列表列表的字典

python

我有一个很大的文件(大约有200k输入)。输入形式为:

A B C D
B E F
C A B D
D

我正在读取此文件并将其存储在列表中,如下所示:

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

每当看到新行时,都会拆分文件。因此,文本如下所示:

[[A B C D] [B E F] [C A B D] [D]]

我现在必须将这些值存储在字典中,其中键值是每个列表的第一个元素。即键将是A,B,C,D。我发现很难输入值作为列表的其余元素。即字典应该看起来像:

{A: [B C D]; B: [E F]; C: [A B D]; 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。


阅读 210

收藏
2020-12-20

共1个答案

小编典典

尝试使用切片:

inlinkDict[docid] = adoc[1:]

对于仅键值在线的情况,这将为您提供一个空列表,而不是0。要获得0,请使用or(总是返回操作数之一):

inlinkDict[docid] = adoc[1:] or 0

dict理解更简单的方法:

>>> with open('/tmp/spam.txt') as f:
...     data = [line.split() for line in f]
... 
>>> {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': 'B C D', 'C': 'A B D', 'B': 'E F', 'D': 0}

注意:dict键必须是唯一的,因此,如果您有以’C’开头的两行,则第一行将被覆盖。

2020-12-20