说我有一个像
这样的文件ID1
Some name
Address
Salary
Gender
ID2
Some name
Address
Salary
Gender
...
IDn
我已经阅读了文件,对其进行了排序,并将所有字段添加到了像
这样的列表中[ID1 , name,Address,Salary,Gender,ID2,name,Address,Salart,Gender..]
我需要的是,列表说
ID1= [name,address,Salary,Gender] ,
ID2 = [name,Address,salary,Gender] and so on.
答案 0 :(得分:1)
如果您已在列表中使用它们,则需要使用grouper
recipe创建字典:
from itertools import izip_longest
def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
ids = {i[0]: i[1:] for i in grouper(the_list,5)}
你最终会得到:
>>> the_list
['ID1', 'name1', 'address1', 'salary1', 'gender1', 'ID2', 'name2', 'address2',
'salary2', 'gender2']
>>> ids = {i[0]: i[1:] for i in grouper(the_list, 5)}
>>> ids
{'ID2': ('name2', 'address2', 'salary2', 'gender2'), 'ID1': ('name1', 'address1'
, 'salary1', 'gender1')}
答案 1 :(得分:1)
您正在迭代的数据是文件对象。您可以对其应用所有itertools技巧,将数据重新格式化为使用键ID
索引的列表字典
所以你从一个发电机开始。该发生器剥离所有非空行。然后你只需迭代这个生成器并使用字典理解创建一个字典。使用itertools.islice将迭代器推进到某个范围,使下一个项目用作键。
<强>实施强>
from itertools import imap, islice
with open("data") as fin:
data = (line for line in imap(str.strip, fin) if line)
data = {line: list(islice(data, 0, 4)) for line in data}
<强>输出强>
print data
{'ID2': ['Some name', 'Address', 'Salary', 'Gender'], 'ID1': ['Some name', 'Address', 'Salary', 'Gender']}