对字典进行排序并将其写入CSV文件

3
我有一个字典,其中元组作为键,列表作为值。
myDict = {
 (1, 9078752378): [('Smith', 'Bob'), 'Head guard'],
 (2, 9097615707): [('Burdell', 'George'), 'Lifeguard'],
 (3, 9048501430): [('Smith', 'Amanda'), 'Lifeguard'],
 (4, 9026450912): [('Brown', 'John'), 'Lifeguard'],
 (5, 9027603006): [('Flowers', 'Claudia'), 'Lifeguard'],
 (6, 9055520890): [('Smith', 'Brown'), 'Head guard'],
 (7, 9008197785): [('Rice', 'Sarah'), 'Lifeguard'],
 (8, 9063479070): [('Dodd', 'Alex'), 'New Lifeguard'],
 (9, 9072301498): [('Sparrow', 'Jack'), 'New Lifeguard'],
 (10, 9084389677): [('Windsor', 'Harry'), 'New Lifeguard']
}

我完全不知道如何将这个字典写入CSV文件,以此格式按顺序排列。
1 9078752378 Smith Bob Head guard

...一直到9

求救!!!

2个回答

4
假设您的格式是一致的,这应该可以解决问题:
with open('youfile.csv', 'w') as f:
  for k,v in sorted(myDict.iteritems()):
    f.write('{} {} {} {} {}\n'.format(k[0], k[1], v[0][0], v[0][1], v[1]))

我需要提醒您一个潜在的问题,即输出格式。如果您需要再次解析,请引用值或使用不同的分隔符,例如:

1,9078752378,Smith,Bob,"Head guard"


这个可行,但在Excel格式中,它被放在了一个单元格中,如何将每一行的条目放入单独的单元格中? - BAI
尝试使用'{},{},{},{},{}\n'而不是'{} {} {} {} {}\n' - wim
请务必查看CSV模块。 - jimhark

3
with open("CSV", 'w') as f:
   f.write('\n'.join([",".join(map(str,[a,b,c,d,e])) for (a, b), ((c, d), e) in sorted(myDict.items())]))

解释 -

sorted(myDict.items())将根据键对字典进行排序。

for (a, b), ((c, d), e) in sorted(myDict.items())将解包您的值。

",".join(map(str,[a,b,c,d,e]))将逗号连接解包后的值。

[",".join(map(str,[a,b,c,d,e])) for (a, b), ((c, d), e) in sorted(myDict.items())]是上述逗号连接值的列表推导式。

'\n'.join([",".join(map(str,[a,b,c,d,e])) for (a, b), ((c, d), e) in sorted(myDict.items())]将使用换行符连接上述列表。


你能否添加一些注释或展开这个单行代码? - Blender
2
@Lokerim,诚然这段代码有点密集,但我能读懂它,尽管不是我写的。实际上,为了可读性更好,最好展开它,并使用良好的变量名称来表示中间值,这样如果出现问题,调试起来会更容易(实际上是可能的)。 - jimhark
目前这个程序将所有数据都放在 Excel 格式的一个单元格中,有没有办法将每个数据分别放在每一行中? - BAI
当您将输出粘贴到Excel中时,请使用“文本导入向导”。然后,选择“分隔符”。单击“下一步”。在下一个屏幕上仅选择“逗号”并单击“完成”。 - Rahul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接