Сортировка словаря по ключу, а затем сортировка списка значений, связанных с каждым ключом, и вывод в файл CSV? - PullRequest
1 голос
/ 01 июня 2019

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

Я пытался сортировать ключи отдельно и список значений отдельно, но при выводе в файл пары перепутались.

    data = {}
    with open(filename, mode = 'r') as f:
        reader = csv.reader(f, delimiter = ',')
        for n, row in enumerate(reader):
            if not n:
                continue
            category, value = row
            if category not in data:
                data[category] = set()
            data[category].add((value))

    columnNames = sorted(data.keys())
    columnValues = []
    for value in data.values():
        columnValues.append(sorted(value))

    print(columnValues)
    with open('sorteddata.csv', 'w') as outfile:
        writer = csv.writer(outfile, delimiter = ',')
        writer.writerow(columnNames)
        writer.writerows(zip_longest(*columnValues))

Если вводится {'number': {54, 1, 95, 78, 85, 87}}, 'name': {'bob', 'steve', 'alex'}, 'color': { 'blue', 'yellow', 'black'}} выходные данные должны быть {'color': {'black', 'blue', 'yellow'}, 'name': {'alex', 'bob', ' steve '},' number ': {1, 54, 78, 85, 87, 94}}

Вместо этого я получаю вывод, который выглядит как {'color': {'alex', 'bob', 'steve'}, 'name': {'black', 'blue', 'yellow'}, 'number ': {1, 54, 78, 85, 87, 94}} где значения цвета и имени меняются местами, но в правильном порядке.

1 Ответ

1 голос
/ 01 июня 2019

здесь вы сортируете ключи и значения независимо, а не связываете их правильно.Сначала нужно отсортировать по ключам, а затем по соответствующим значениям отсортировать список

Вот рабочее решение с OrderDict

import collections
inp = {
    'number': {54, 1, 95, 78, 85, 87},
    'name': {'bob', 'steve', 'alex'},
    'color': {'blue', 'yellow', 'black'}}

ans = collections.OrderedDict()
for item in sorted(inp):     # sorting with the key
    val = sorted(inp[item])  # fetching the value list from the input dict
    print(item, val)
    ans[item] = sorted(val)  # saving the item and sorted values, in the new list
print(ans)
...