按键对字典进行排序,然后还对与每个键相关的值列表进行排序,然后输出到CSV文件?

时间:2019-06-01 05:29:16

标签: python sorting dictionary python-3.7

我试图按键和值对字典进行排序以创建输出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 个答案:

答案 0 :(得分:1)

在这里,您正在对键和值进行独立排序,并且未正确链接它们。您需要先对键进行排序,然后对相应的值对列表进行排序

这是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)