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

これは、ストリームで動作するイテレータを使用したソリューションです (したがって、最初に入力全体を読み取ることに依存しません)。

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 に答える
0
with open('candidate.txt', 'r') as reader:
    print dict(zip(*[iter(reader.read().split())]*2))

With開かれたファイル ストリームは、それを全体として呼び出しreaderread次にsplit空白で分割して呼び出しました。これで、単語のリストができました。これをiterエーターに変換してリストに入れ、それを乗算して2、2 つの同じイテレーターのリストを作成します。これらは、イオナリーzipの入力としてペアにされます。dict

于 2012-07-03T08:38:16.230 に答える