排序字典并写入CSV文件

3 投票
2 回答
3226 浏览
提问于 2025-04-17 15:11

我有一个字典,字典的键是元组,值是列表。

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 个回答

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())] 这个代码会把上面的列表用换行符连接起来。

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"

撰写回答