【问题标题】:Write a Collection object to file Python将 Collection 对象写入文件 Python
【发布时间】:2015-08-24 12:35:37
【问题描述】:

我有一个Collection 对象如下:

Counter({'Saree': 5679, '': 4860, 'Cotton': 4201, 'Printed': 3715})

我想生成一个包含键和值的 CSV 文件,按值的降序排列。

A      B
Saree  5679
       4860
Cotton 4201
Printed 3715

我尝试了以下代码,其中value['Saree','','Cotton','printed'] 的列表:

for k, v in sorted(collections.Counter(value)):
    f.write(k+delimiter+v)

但这并没有奏效,因为我假设 Collection 对象只不过是一本字典。

我得到的错误如下: ValueError: 需要多于 0 个值才能解压

for k, v in sorted(collections.Counter(value)):

【问题讨论】:

  • “没用”并没有告诉我们出了什么问题。异常回溯会。
  • sorted(collections.Counter(value)) 部分看起来很可疑。 value 是什么?指向您拥有的集合的变量的名称是什么?
  • 要将其写入文件,您可以使用jsoncsv 或其他任何方式。然后,当你读回它时,只需将普通字典转换为计数器。究竟是什么问题?
  • 你为什么不直接pickle呢?
  • 或者您是在问如何将它们按排序顺序写入文件?在这种情况下,请尝试your_counter.most_common()

标签: python collections


【解决方案1】:

由于您似乎希望首先查看最高计数,因此 Counter 的 most_common() 方法为您提供了一个 (key, value) 对列表,其中包含按值排序的项目。然后,您可以遍历该列表,打印出键和值,如下所示。

for k, v in c.most_common():
    print "{:10} {:4}".format(k, v)

给予

Saree      5679
           4860
Cotton     4201
Printed    3715

好的,你想要一个 CSV 文件(我们应该以某种方式直觉)。这将完成这项工作:

with open("file.csv", "wb") as f:
    w = csv.writer(f)
    w.writerows(c.most_common())

我相信您将能够处理添加列标题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多