我在标准输入中提供了文件#1:
{123:{'all_uppercase': 0, '#': 0, 'sscore !=0': 15}}
{456:{'all_uppercase': 0, '#': 1, 'sscore !=0': 19}}
{789:{'all_uppercase': 0, '#': 1, 'sscore !=0': 20}}
我有文件#2:
{'+1': {'all_uppercase': 0, '#': 0, 'sscore !=0': 15}}
{'0': {'all_uppercase': 0, '#': 1, 'sscore !=0': 19}}
{'0': {'all_uppercase': 0, '#': 0, 'sscore !=0': 8}}
我的输出应该是原样的:
123 15 +1
456 19 0
789 20 0
为什么这些线必须按顺序排列是很重要的。因此,对于id-123,456,789,二进制数分别为+1,0,0和值15,19,20
我之所以这样,因为它们是文件中的字典,但字典的问题是“顺序”,所以值不是正确的顺序。
在标准输入时,我提供文件#1。
for line in sys.stdin:
d = ast.literal_eval(line)
for k,v in d.items():
inner_dict = dicts.setdefault(k, {})
inner_dict['sscore !=0'] = v.get('sscore !=0')
f = open("file#2.txt","r")
for score in f:
d2 = ast.literal_eval(senti)
print k,dicts[k]['sscore !=0'],d2.keys()
f.close()
答案 0 :(得分:2)
您似乎需要像这样使用zip
with open("file#2.txt","r") as f:
for line, score in zip(sys.stdin, f):
...
答案 1 :(得分:1)
这就是我解决的问题:
dicts = {}
inner_dict = {}
以打印格式打开文件
with open("file#1.txt","r") as f:
Zip有助于保持原样
for line, score in zip(sys.stdin, f):
#将其解释为词典
d2 = ast.literal_eval(score)
#for键,字典项中的值
for k,v in d2.items():
inner_dict = dicts.setdefault(k, {})
#getsn字典值部分的值,因为字典中的字典
inner_dict['sscore !=0'] = v.get('sscore !=0')
#prints字典的关键字,获取与其键对应的sscore的值,通过按空格分割得到第一列值
print k,dicts[k]['sscore !=0'],re.split("\s+", line.strip())[0]
如果有人可以改进代码,请告诉我。