0

私は持っています

     d= {'fall':['basketball', 'hockey','football']
           'spring': ['cross country','tennis','baseball']
           'summer':['soccer', 'softball']
            etc....

ファイルに書きたい。以下のように。

秋のスポーツ:
バスケットボール
ホッケー
サッカー
春のスポーツ:
クロスカントリー
テニス
野球..

私がこれまでに書いたコード:

for n in range(len(sp)):
    print("Sports Played in",i)
    print(sp[i,'\n'])

私もそれを逆にしたいので、アルファベット順に読みます:

    野球 <ここにギャップがあるはず> 春
    バスケットボール <ここにギャップがあるはず> 秋
    クロスカントリー <ここにギャップがあるはず> 春

列が整列する必要があります。

def reverse_dict(dct):
    reverse = {}
    for key, vals in dct.items():
        for val in vals:
            if val not in reverse:
                reverse[val] = []
            reverse[val].append(key)
    return reverse

keys=list(reverse.keys())
keys.sort()
for x in keys:
    f1out.write("".join(
        str([x, reverse[x]]).strip("[]").replace("[" ,'').replace(",", "'\t'")
        + '\n'))

何か案は?Python 3 以降のみ。

4

2 に答える 2

1

これはそれを行う必要があります:

 with open("data1.txt","w") as f:
    for season in d:
        f.write("Sports played in {0}\n".format(season))
        for sp in d[season]:
            f.write(sp+'\n')
于 2012-10-28T17:04:46.120 に答える
0

私はこれがあなたが要求したすべてを行うと信じています. 指定された行を削除またはコメントアウトすると、Python 3 で動作するはずですが、実際にそれが正しいかどうかは確認していません。そうでない場合は、非常に近いはずです。

from __future__ import print_function  # remove for Python 3
from collections import defaultdict
import sys

GAP = 4
INDENT = ' ' * 2
TEST = True  # print output rather than write it to files

d = {'fall': ['basketball', 'hockey', 'football'],
     'spring': ['cross country', 'tennis', 'baseball', 'archery'],
     'summer': ['soccer', 'softball', 'archery'] }

def reverse_dict(dct):
    reverse = defaultdict(list)
    for key, vals in list(dct.items()):
        for val in vals:
            reverse[val].append(key)
    return reverse

rev_d = reverse_dict(d)

with open("seasonal_sports.txt", "wt") as output:
    if TEST: output = sys.stdout
    for season in sorted(d):
        print('Sports played in {}:'.format(season), file=output)
        for sport in d[season]:
            print(INDENT+sport, file=output)

with open("sport_seasons.txt", "wt") as output:
    if TEST: output = sys.stdout
    longest = max(list(map(len, rev_d)))
    for sport in sorted(rev_d):
        print('{:<{width}}'.format(sport, width=longest+GAP),
              ', '.join(rev_d[sport]), file=output)
于 2012-10-28T18:55:48.587 に答える