Как выполнить итерацию defaultdict (список) и сделать вывод json в python? - PullRequest
0 голосов
/ 07 мая 2020

Как выполнить итерацию defaultdict(list) в python таким образом, чтобы я мог получить количество каждой строки, отсортированной по наивысшему числу. В приведенном ниже коде я читаю файл csv в

Итак, я прочитал об этом и обнаружил, что могу использовать здесь collections.Counter, но в моем столбце poc также много строк empty/null, и он также подсчитывает те тоже. Есть ли способ избежать этого? Также можем ли мы сгенерировать json с этим результатом, если есть какой-либо способ?

import sys
import csv
import collections
from collections import defaultdict

filename = sys.argv[1]
columns = defaultdict(list)

with open(filename) as f:
    reader = csv.DictReader(f)
    for row in reader:
        for (k,v) in row.items():
            columns[k].append(v)

print(collections.Counter(columns['poc']))

Это результат, который я получаю на данный момент:

Counter({'': 100,'\health':2,'Checking records':2,...})

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Вы можете использовать встроенную функцию filter для удаления пустых строк или других значений «false-y», таких как None, 0 или False.

collections.Counter(filter(None, columns['poc']))

Если вы хотите исключить пустые строки, но оставить другие значения false-y, используйте лямбда для определения критериев фильтрации.

collections.Counter(filter(lambda x: x != '', columns['poc']))

Counter является подклассом dict, поэтому экземпляр может быть сериализован в JSON как любой словарь: json.dumps(counter)

0 голосов
/ 07 мая 2020

Думаю, это можно сделать, просто используя словарь.

key  = dict(collections.Counter(columns['poc']))
#removes the empty element
key.pop('')
print(key)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...