输入文件如下所示:
A 3.00 B 4.00 C 5.00 D 6.00
E 3.20 F 6.00 G 8.22
H 9.00
I 9.23 J 89.2
K 32.344
我希望字符成为字典中的键 而浮标是价值观。
这是我到目前为止的非工作失败。
def main():
#Input File
reader = open('candidate.txt', 'r'
my_dictionary = {}
i=0
for line in reader.readlines():
variable = line.split(' ')[i]
value = line.split(' ')[i+1]
my_dictionary[variable]= value
i+=2
print my_dictionary
if __name__ == '__main__':
main()
答案 0 :(得分:7)
s='''A 3.00 B 4.00 C 5.00 D 6.00
E 3.20 F 6.00 G 8.22
H 9.00
I 9.23 J 89.2
K 32.344
'''
s=s.split()
d=dict(zip(s[::2], s[1::2]))
print d
在上下文中:
my_dict = dict()
for line in reader.readlines():
pairs = line.split()
for key, value in zip(pairs[::2],pairs[1::2]):
my_dict[key] = value # strip() not needed
答案 1 :(得分:0)
这是一个使用在流上运行的迭代器的解决方案(因此不依赖于首先读取整个输入):
from itertools import izip
def group(iterable, n):
"""Yield iterable's items n at a time"""
args = [iter(iterable)]*n
return izip(*args)
def dictize(stream):
r = {}
for line in stream:
for k,v in group(line.split(), 2):
r[k] = v
return r
from StringIO import StringIO
testinput = """A 3.00 B 4.00 C 5.00 D 6.00
E 3.20 F 6.00 G 8.22
H 9.00
I 9.23 J 89.2
K 32.344"""
teststream = StringIO(testinput)
print dictize(teststream)
如果你可以使用词典理解,你可以用一行代替dictize
函数:
print {k:v for line in teststream for k,v in group(line.split(),2)}
答案 2 :(得分:0)
with open('candidate.txt', 'r') as reader:
print dict(zip(*[iter(reader.read().split())]*2))
With
打开的文件流名为reader
我们read
作为一个整体,然后split
按空格分成几部分。现在我们有一个单词列表,我们将其转换为iter
ator并将其放在一个列表中,并将其乘以2
,以生成两个相同迭代器的列表。这些zip
成对作为dict
离子的输入。