gsb*_*gsb 17 python dictionary list
我有一个巨大的文件(大约200k输入).输入格式如下:
A B C D
B E F
C A B D
D
Run Code Online (Sandbox Code Playgroud)
我正在读取此文件并将其存储在列表中,如下所示:
text = f.read().split('\n')
Run Code Online (Sandbox Code Playgroud)
这会在文件看到新行时拆分文件.因此文字如下:
[[A B C D] [B E F] [C A B D] [D]]
Run Code Online (Sandbox Code Playgroud)
我现在必须将这些值存储在字典中,其中键值是每个列表中的第一个元素.即键将是A,B,C,D.我发现很难输入值作为列表的其余元素.即字典应如下所示:
{A: [B C D]; B: [E F]; C: [A B D]; D: []}
Run Code Online (Sandbox Code Playgroud)
我做了以下事情:
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}
Run Code Online (Sandbox Code Playgroud)
请帮助我如何将值添加到我的字典中.如果列表中没有元素,那么它应该是0,除了作为键值的元素.就像0中的例子一样.
Ray*_*ger 22
字典理解简化了这项任务:
>>> 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': []}
Run Code Online (Sandbox Code Playgroud)
wim*_*wim 20
尝试使用切片:
inlinkDict[docid] = adoc[1:]
Run Code Online (Sandbox Code Playgroud)
对于只有键值在行上的情况,这将为您提供一个空列表而不是0.要获得0,您可以使用条件赋值:
inlinkDict[docid] = adoc[1:] or 0
Run Code Online (Sandbox Code Playgroud)
简单易懂的词典理解:
>>> 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}
Run Code Online (Sandbox Code Playgroud)
注意:dict键必须是唯一的,所以如果你有两行以'C'开头,那么第一行将被覆盖.
归档时间: |
|
查看次数: |
43865 次 |
最近记录: |