2012-10-28 40 views
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或更高版本。

+0

爲反向我得到'''在我的鑰匙周圍.. – user1753878

回答

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') 
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) 
+0

thx爲您的時間和巨大的努力。一個後續問題: – user1753878

+0

f.write(「{} {:^ 20} \ n」.format(x,str(reverse [x])。strip(「[]」)))我嘗試添加一個寬度,將無法與{:^ 20} – user1753878

+0

@ user1753878一起工作:我不知道 - 語法上,該語句看起來不錯。只是說「它不會工作」是沒有足夠的信息給我提供額外的信息或建議。需要知道事情的具體內容,如發生了什麼問題和/或產生了哪些錯誤消息。 – martineau