【发布时间】:2016-10-18 00:28:09
【问题描述】:
我有两个列表如下:
NumberandLetter1=['1 E\n', '2 K\n']
NumberandLetter2=['1 E,L,K\n', '2 K,L\n']
从第一个列表中,我尝试制作 NUMBERS:LETTERS 的字典,并且为 list1 制作字典没有任何问题:
NumberandLetter1=['1 E\n', '2 K\n'] ----> {'E': 1, 'K': 2}
但是,对于第二个列表,我想用带有换行符的相应数字替换每个逗号,并将其写为具有执行时间的新文件:
NumberandLetter2=['1 E,L,K\n', '2 K,L\n'] ---> ['1 E\n1 L,\n1 K\n', '2 K,\n2 L\n']
executedTimeOutput.txt=['1 E\n1 L,\n1 K\n', '2 K,\n2 L\n']
然后,使用这个 executeTimeOutput.txt 作为下一个循环 inroder 的输入,以获取与 NumberandLetter1(list1) 相同的字典
重点是:
case1 --> 如果单行有一个数字和一个字母,则创建一个字典。
case 2 -> 如果单行有一个数字和多个字母,则每个字母都有一个相应的编号作为新行。
我尝试过的:
当我遇到案例 2 -> 我只是将每个逗号替换为一个带有换行符的数字,并将其写为带有执行时间的 newfile。然后使用这个新文件作为输入来获得类似案例 1 的输出。
它没有将文件作为输入。有人可以告诉我如何解决这个问题或一些不同的想法来获得相同的结果。
import os
import sys
import random
from itertools import groupby, combinations, chain
from time import gmtime, strftime
def main(NumberandLetter,current):
Mutant_dict = {}
res_key = ''
fh = open(NumberandLetter, 'r').readlines()
MutatedAll = open(current+"output.txt", "w")
for i in fh:
if "," not in i:
res_key = str(filter(str.isalpha, i))
Mutant_dict[res_key] = int(filter(str.isdigit, i))
else:
MutatedAll.write(i.replace(",", "\n" + i[0] + " "))
fh1 = open(os.getcwd()+"/"+current+"output.txt", 'r').readlines()
for i in fh1:
res_key = str(filter(str.isalpha, i))
Mutant_dict[res_key] = int(filter(str.isdigit, i))
if __name__ == "__main__":
main(sys.argv[1],strftime("%d%m%y_%H%M%S", gmtime()))
预期输出:
NumberandLetter1=['1 E\n', '2 K\n'] ----> {'E': 1, 'K': 2}
NumberandLetter2=['1 E,L,K\n', '2 K,L\n'] ----> {'E': 1, 'L': 1, 'K':1, 'K':2, 'L':2}
至于现在我是这样的:
NumberandLetter2=['1 E,L,K\n', '2 K,L\n'] ---->{'ELK': 1, 'KL': 2}
在else条件下我做的很简单:
hi=[]
Mt={'ELK': 1, 'KL': 2}
for key,val in Mt.iteritems():
for k in key:
hi.append(k+'%d' % (val,))
OUTPUT=['E1', 'L1', 'K1', 'K2', 'L2']
【问题讨论】:
-
给我一个建议:Mt={'ELK': 1, 'KL': 2} for key,val in Mt.iteritems(): for k in key: print k,val
-
{'E': 1, 'L': 1, 'K':1, 'K':2, 'L':2}不是有效的 Python 字典。重复键!
标签: python list loops dictionary file-handling