0

输入文件如下所示:

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()
4

3 回答 3

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
于 2012-07-03T06:47:07.350 回答
0
with open('candidate.txt', 'r') as reader:
    print dict(zip(*[iter(reader.read().split())]*2))

With打开的文件流将readerread称为一个整体,然后split按空格将其分段。现在我们有一个单词列表,我们将其转换为一个iterator 并将其放入一个列表中并乘以它2来生成一个包含两个相同迭代器的列表。这些被zip输入成对作为离子的输入dict

于 2012-07-03T08:38:16.230 回答
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)}
于 2012-07-03T07:02:09.540 回答