【问题标题】:Create python dictionary from TXT file - value aggregation从 TXT 文件创建 python 字典 - 值聚合
【发布时间】:2018-08-03 09:36:17
【问题描述】:

我在表单中有一个 TXT 文件

22px 31
11px 326
18px 8
13px 41
22px 43
11px 291

其中第一列是字体大小(“px”),第二列是字符数。有什么方法可以聚合(求和)所有字体大小(键)的字符数(值)并使用 python 字典除以总字符数?假定的解决方案应采用以下形式:

11px    83% # =(326+291)/(31+326+8+41+43+291)
13px    6%
18px    1%
22px    10%

【问题讨论】:

标签: python dictionary sum key-value-store


【解决方案1】:

无需担心熊猫。文本文件是可迭代的。只需打开它,对行(字符串)进行操作并填写字典。

file = "font.txt"

with open(file, "r") as f:
    dic = dict()
    for line in f:
        x = line.strip("\n").split(" ")

        key = int(x[0].strip("px"))
        value = int(x[1])

        if key not in dic.keys():
            dic[key] = [value]
        else:
            dic[key].append(value)

输出:

{22: [31, 43], 11: [326, 291], 18: [8], 13: [41]}

然后就是简单的数学:

total_number_of_character = sum([sum(x) for x in dic.values()])
percentage = percentage = {key:sum(value)/total_number_of_character*100 for (key, value) in dic.items()}

输出:

{22: 10.0,
 11: 83.37837837837839,
 18: 1.0810810810810811,
 13: 5.540540540540541}

【讨论】:

  • 非常感谢您的解决方案 Mathieu!最后一件事:如何按第一列排序字典(即顶部的字体大小为 11px)?
  • 字典根据定义是无序的。您可以用另一个数据结构替换字典。 1. 元组列表[(font, [N character 1, N character 2]), ...],然后您将按元组的第一个元素进行排序,如下所示:sorted(L, key=lambda x:x[0])。 2. 你可以使用 OrderedDict。阅读:docs.python.org/3/library/…
猜你喜欢
  • 2021-05-10
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多