Python 在写入csv时使用字典键作为坐标

Python 在写入csv时使用字典键作为坐标,python,csv,dictionary,Python,Csv,Dictionary,我有一个字典,其中单元格坐标作为键,所需单元格内容作为值,例如: dict1 = {'AN32': '2', 'AZ17': '47', ect...} 单元格范围为D4:AZ52 我想将其写入csv文件 当涉及到设计时,我遇到的问题是,字典不一定按字母或数字排序,正如上面的例子所示 我知道如何使用 with open('example.csv', 'w') as f: for i in dict1: f.write(str(dict1[i]) + ',') 这将

我有一个字典,其中单元格坐标作为键,所需单元格内容作为值,例如:

dict1 = {'AN32': '2', 'AZ17': '47', ect...}
单元格范围为
D4:AZ52

我想将其写入csv文件

当涉及到设计时,我遇到的问题是,字典不一定按字母或数字排序,正如上面的例子所示

我知道如何使用

with open('example.csv', 'w') as f:

    for i in dict1:

        f.write(str(dict1[i]) + ',')

这将按顺序写出值,这意味着它们不在正确的单元格中,我需要它们位于由键指定的单元格中。

此代码使用列表理解来构建每一行

首先,我们使用
string
模块中的
uppercase
字符串创建列标签列表,并使用简单的列表理解构建所有列标签的列表

然后,我们使用稍微复杂一些的列表理解,通过将每个列标签与当前行号(转换为字符串)组合来生成键。该键被传递到
dict1
.get()
方法,以获取与该键关联的值。我们使用一个空字符串
'
作为
.get()
的第二个参数,因此如果dict中不存在键,我们将得到一个空字符串

然后我们使用
.join()
方法连接所有这些字符串,用逗号分隔

from string import uppercase

#Make a list of the column letters
cols = list(uppercase[3:]) + ['A' + c for c in uppercase]
#print(cols)

with open('example.csv', 'w') as f:
    for r in range(4, 53):
        row = ','.join([dict1.get(c + str(r), '') for c in cols])
        f.write(row + '\n')

如果
dict1
中的值实际上是
int
而不是字符串,那么您需要将它们转换为字符串,然后再尝试合并它们。将列表更改为

row = ','.join([str(dict1.get(c + str(r), '')) for c in cols])

即使某些值是字符串,而某些值是数字,这也能解决问题。

您所需的输出在csv文件中应该是什么样子的可能dup?我假设您希望csv中的数据有48列48行。正确吗?正确,48列,48行。你能使用
OrderedDict
(按字母顺序存储键)吗?我已经阅读并理解了解决方案,它非常优雅。然而,它也抛出了一个错误:
TypeError:sequence item 12:expected string,进入found“
@JoeSmart:我怀疑错误消息实际上是说“expected string,int found”“。是否所有值都在
dict1
字符串中?根据你的样本数据,我认为他们是。顺便说一句,我刚刚注意到您的样本数据中有一个键,即
'Z2'
,但您还说单元格范围是
D4:AZ52
。我的样本数据不清楚,抱歉。我给出的范围是正确的。我只是为样本数据键入随机坐标作为结构示例。我会仔细检查它们是否都是字符串。@JoeSmart:好的。你应该修正问题中的
dict1
行。我已经更新了我的答案来处理int值。