【问题标题】:python data dictionary outpython数据字典输出
【发布时间】:2013-11-11 04:00:53
【问题描述】:

我很抱歉,因为我对 python 很陌生。我正在遍历几个名称,它们都得到相同的字典键和值。我怎样才能只打印一次密钥并继续按照迭代将值附加到 csv?

     for name in namelist:
       print >> out,','.join(data.keys())
       print >> out,','.join(data.values())
     fundamental_out.close()

输出如下所示

   >>'key1,key2,key3'
   >>'value1,value2,value3'
   >>'key1,key2,key3'
   >>'value1,value2,value3'

说key3是名字,key1和2是数字

我怎样才能得到类似的输出

   >>'key1,key2,key3'
   >>'value1,value2,value3'
   >>'value1,value2,value3'

还有一种方法可以按顺序对数据字典进行排序,以便 key3(即名称将是第一列)?

   >>'key3,key1,key2'
   >>'value3,value1,value2'
   >>'value3,value1,value2'

谢谢!

【问题讨论】:

    标签: python csv import data-dictionary


    【解决方案1】:

    您可以使用natural sort 对字典键进行排序:

    import re
    
    def natural_sort(l): 
        #https://stackoverflow.com/a/4836734/846892
        convert = lambda text: int(text) if text.isdigit() else text.lower() 
        alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ] 
        return sorted(l, key = alphanum_key)
    
    sorted_keys = ['key3'] + natural_sort(data.viewkeys() - {'key3'})
    
    print >> out, ','.join(keys)
    for name in namelist:
           print >> out, ','.join(str(data[k]) for k in keys)
    

    【讨论】:

      【解决方案2】:
      from itertools import chain
      def arrange(l):
          return list(chain([l[-1]], l[:-1]))
      
      print ','.join(arrange(map(lambda x: str(x), namelist.keys())))
      print ','.join(arrange(map(lambda x: str(x), namelist.values())))
      

      【讨论】:

      • 谢谢!但是如何打印出带有键的第一行和带有值的第二行遍历名称列表并确保该值与具有相应“键变量”的名称相对应?
      • 非常感谢!它有助于排序。但仍然在每次迭代中打印出密钥。有没有办法只打印一次键并且值在每次迭代时继续打印值?
      猜你喜欢
      • 1970-01-01
      • 2021-07-28
      • 2016-05-25
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 2022-07-29
      相关资源
      最近更新 更多