【问题标题】:How to create a dictionary from data如何从数据中创建字典
【发布时间】:2019-11-30 22:58:39
【问题描述】:

我正在尝试创建一个函数,为每一天(第一列)创建一个字典,并记录当天的反馈。

我遇到的主要问题是如何检测这是新的一天并创建一个新字典。

这是数据:

0   21  M   34  P
0   22  F   12  N
0   28  M   67  P
1   18  M   22  P
1   21  F   88  P
1   34  F   97  N
2   55  M   21  P
2   65  M   32  P
2   33  F   55  N
2   48  F   7   P

【问题讨论】:

  • 请展示您为尝试解决此任务而编写的代码。

标签: python-3.x dictionary file-io


【解决方案1】:

另一种解决方案,不使用任何库:

txt = '''

0   21  M   34  P
0   22  F   12  N
0   28  M   67  P
1   18  M   22  P
1   21  F   88  P
1   34  F   97  N
2   55  M   21  P
2   65  M   32  P
2   33  F   55  N
2   48  F   7   P

'''

d = {}
for day, *_, v in (i for i in map(str.split, txt.splitlines()) if i):
    d.setdefault(day, {}).setdefault(v, 0)
    d[day][v] += 1

print(d)

打印:

{'0': {'P': 2, 'N': 1}, '1': {'P': 2, 'N': 1}, '2': {'P': 3, 'N': 1}}

要从文件中加载数据,您可以使用以下示例:

with open('sample.txt', 'r') as f_in:
    d = {}
    for day, *_, v in (i for i in map(str.split, f_in) if i):
        d.setdefault(day, {}).setdefault(v, 0)
        d[day][v] += 1

print(d)

【讨论】:

    【解决方案2】:

    结合csv.reader + collections.defaultdict + collections.Counter 对象:

    from collections import defaultdict, Counter
    import csv
    from io import StringIO
    
    data = '''0   21  M   34  P
    0   22  F   12  N
    0   28  M   67  P
    1   18  M   22  P
    1   21  F   88  P
    1   34  F   97  N
    2   55  M   21  P
    2   65  M   32  P
    2   33  F   55  N
    2   48  F   7   P'''
    
    d = defaultdict(Counter)
    reader = csv.reader(StringIO(data), skipinitialspace=True, delimiter=' ')
    for row in reader:
        d[row[0]][row[4]] += 1
    d = {int(k): dict(v) for k, v in d.items()}
    
    print(d)
    

    输出:

    {0: {'P': 2, 'N': 1}, 1: {'P': 2, 'N': 1}, 2: {'P': 3, 'N': 1}}
    

    【讨论】:

      猜你喜欢
      • 2020-05-10
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 2016-05-22
      相关资源
      最近更新 更多