【问题标题】:Combine first column from multiple files合并来自多个文件的第一列
【发布时间】:2013-11-28 04:00:12
【问题描述】:

我有文件#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()

【问题讨论】:

    标签: python file file-io dictionary


    【解决方案1】:

    看来你需要像这样使用zip

    with open("file#2.txt","r") as f:
        for line, score in zip(sys.stdin, f):
            ...
    

    【讨论】:

    • 我不明白我将如何使用 zip。 Zip 似乎很有用
    【解决方案2】:

    我就是这样解决的:

    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 key,字典项中的值

          for k,v in d2.items(): 
             inner_dict = dicts.setdefault(k, {}) 
    

    #获取字典中值部分的值,因为它的字典在字典中

             inner_dict['sscore !=0'] = v.get('sscore !=0') 
    

    #打印字典的key,获取其key对应的sscore的值,通过空格分割得到第一列的值

          print k,dicts[k]['sscore !=0'],re.split("\s+", line.strip())[0]
    

    如果有人可以改进代码,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 2017-05-01
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多