Python 3.6-格式问题(其他小问题) A部分-空行
我目前正在研究Kyran Dale用Python和JavaScript实现的数据可视化。从示例3.1中,我有以下内容:Python 3.6-格式问题(其他小问题) A部分-空行,python,python-3.x,format,Python,Python 3.x,Format,我目前正在研究Kyran Dale用Python和JavaScript实现的数据可视化。从示例3.1中,我有以下内容: nobel_winners = [ {'name' : 'Albert Einstein', 'nationality': 'German', 'sex' : 'male', 'category' : 'Physics', 'year' : 1921}, {'name' : 'Paul Dirac', 'nati
nobel_winners = [
{'name' : 'Albert Einstein',
'nationality': 'German',
'sex' : 'male',
'category' : 'Physics',
'year' : 1921},
{'name' : 'Paul Dirac',
'nationality': 'British',
'sex' : 'male',
'category' : 'Physics',
'year' : 1933},
{'name' : 'Marie Curie',
'nationality': 'Polish',
'sex' : 'female',
'category' : 'Chemistry',
'year' : 1911}
]
cols = nobel_winners[0].keys()
# cols.sort() # <<== this produces an error - see below
with open('./nobel_winners.csv', 'w') as f:
f.write(','.join(cols) + '\n')
for o in nobel_winners:
row = [str(o[col]) for col in cols]
f.write(','.join(row) + '\n')
with open('./nobel_winners.csv') as f:
for line in f.readlines():
print(line),
这很好,但是,当我打印输出(最后3行代码)时,我得到:
[pol@UNKNOWN example_3.1]$ python example3.1.py
name,nationality,sex,category,year
Albert Einstein,German,male,Physics,1921
Paul Dirac,British,male,Physics,1933
Marie Curie,Polish,female,Chemistry,1911
[pol@UNKNOWN example_3.1]$
i、 每行之间都有空格(我不想要!)。作者特别地谈到了此处末尾的逗号(代码的最后一行)print(行),“在print函数调用后添加逗号会禁止添加不必要的换行符。”
显然,事实并非如此。如果删除逗号,则得到相同的结果,即打印输出中的空格
我想知道:
[pol@UNKNOWN example_3.1]$ python example3.1.py
name,nationality,sex,category,year
Albert Einstein,German,male,Physics,1921
Paul Dirac,British,male,Physics,1933
Marie Curie,Polish,female,Chemistry,1911
[pol@UNKNOWN example_3.1]$
[pol@UNKNOWN示例_3.1]$python示例3.1.py
回溯(最近一次呼叫最后一次):
文件“example3.1.py”,第20行,在
cols.sort()#这听起来都像是作者对脚本使用了不同的Python版本。我推荐Python 3中的以下两个代码段:
打印(line,end=”“)
删除换行符后缀和sorted(cols)
甚至sorted(诺贝尔奖获得者[0])
,因为它会自动使用dict键。否则您必须使用排序(诺贝尔奖获得者[0].values())
海事组织没有解释问题的某些部分: 现在,我甚至不明白作者的意思
答复1:
cols = nobel_winners[0].keys()
# cols.sort() # <<== this produces an error - see below
生成的键
数据不再与原始dict连接
@stackels答案中提到的sorted
方法也很好。它还制作了一个副本
dict值也是如此
答复二:
现在还不完全清楚,为什么作者更喜欢排序顺序,但他肯定需要设置一些列的顺序,因为常规dict中的数据顺序没有定义。因此,他设置列顺序,并对标题和所有数据行使用相同的顺序。因此它们不能失去同步。在
print
上的尾随逗号是用于Python 2.x的,在Python 3.x中,它不会做任何有用的事情,因为print
现在是一个函数(出于类似目的,它使用end
参数)dict.keys
用于生成列表,该列表具有.sort
方法。长话短说:这段代码不是为Python3编写的。谢谢你,但是为什么我必须在行尾输入任何东西呢?为什么它不能按原样打印文件,并将换行符视为给定行的一部分和结尾?关于Python2/3的真正痛苦-作者明确表示他将使用3!!!谢谢你,但是把可乐分类有什么意义呢?这不会使列标题与数据不同步吗?在这种情况下不会,因为他对列进行排序,然后两者都进行排序,所以使用键作为标题行,然后以相同的顺序写入每个值:[str(o[col])表示col in cols]
谢谢-但为什么我必须在行尾输入任何内容-为什么它不能按原样打印文件,并将换行符视为给定行的一部分和行尾?关于Python2/3的真正痛苦-作者明确表示他将使用3!p、 你在之前的评论中忘记了什么吗?我现在可以看到,排序不会影响数据-如果对“COL”进行排序,则批次将被排序!我不确定你的问题是什么。sorted()
函数应返回对象的副本。如果您想使用cols
,请使用cols=sorted(诺贝尔奖获得者[0])
。
keys = list(somedict.keys())