我试图按键和值对字典进行排序以创建输出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}},其中颜色和名称值以正确的顺序交换。
答案 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)