强迫症已被 python 的 dictionary 逼疯

2016-01-23 00:49:06 +08:00
 Cassandra

本来不想上 V2 来问的啊,可是一想到这问题我就要疯啊啊啊啊
强迫症已撞死在墙上{>~<}
有没有可能 按照我输入的顺序 print 一个 dictionary 的 key

例如说,我现在有 有一个 dictonary 输入为
studentGrades = {'Steven':90, 'Chole':70,'Bob':100}
print(studentGrades)

如果不作任何改变,这个 print 的 result 在某种程度上是 random
可是我想按照我输入的顺序来了,也就是 output 从 Steven 到 Chole 到 Bob

我现在只能做到按照字母顺序来排列,也就是 Bob, Chole, Steven

我试过什么 orderedDict 什么的,但是不 work ,我也不知道是不是我写错了

不改过来总觉得作业没有写完,都不想交了%>_<%

求大家帮帮忙,求轻喷
顺便说一句是 python3.5

7995 次点击
所在节点    Python
84 条回复
ipconfiger
2016-01-23 00:51:56 +08:00
数据结构本身就决定了没可能啊, 好好学学数据结构先

绕弯能实现, 蛋痛
fy
2016-01-23 00:54:36 +08:00
我也觉的这是一个不好的地方,有序字典不是不 work ,是你先创建了一个标准字典,然后标准字典转换成了无序字典。

换一种创建方式就好了
OrderedDict((('c', 3), ('a',1), ('b',2)))

我觉得这确实是个问题
zeyexe
2016-01-23 00:55:19 +08:00
OrderedDict 是可以实现顺序输出的,也许你的用法有误。
leavic
2016-01-23 00:56:57 +08:00
Cassandra
2016-01-23 00:58:12 +08:00
@ipconfiger 完全没可能嘛?你说的绕弯是什么样的方法呢?老师布置作业的时候都还没讲怎么创建 dictionary 呢~然而刚讲完创建作业就要教了 T^T
yelite
2016-01-23 00:59:13 +08:00
OrderedDict 用 tuple list 初始化就可以了,
OrderedDict({'Steven':90, 'Chole':70,'Bob':100}) 这样肯定是不行的
Cassandra
2016-01-23 01:00:32 +08:00
@fy studentGrades = OrderedDict((('Steven':90), ('Chole':70),('Bob':100) 这样伐?原谅我悟性是在太差
Cassandra
2016-01-23 01:01:34 +08:00
@zeyexe
@yelite
求大神们教正确使用方法
Cassandra
2016-01-23 01:02:48 +08:00
@leavic 感谢,我再试试
xuboying
2016-01-23 01:07:29 +08:00
2.7 语法,使用前把全角空格替换成半角空格

#!python

def myorder(key):
   return ['Steven','Bob','Chole'].index(key)

studentGrades = {'Steven':90, 'Chole':70,'Bob':100}
for k in sorted(studentGrades.keys(),key=myorder):
   print "%s ===> %d" % (k,studentGrades[k])
gccplus
2016-01-23 01:09:32 +08:00
https://pymotw.com/2/collections/ordereddict.html

In [5]: import collections
In [6]: d = collections.OrderedDict()
In [7]: d['Steven']=90
In [8]: d['Chole']=70
In [9]: d['Bob']=100
fy
2016-01-23 01:09:45 +08:00
@Cassandra
这个姿势: student_grades = OrderedDict((('Steven',90), ('Chole',70),('Bob', 100)))

另外 Python 不用驼峰法则!命名是中间隔下划线的,函数和类方法都是这样的!
Cassandra
2016-01-23 01:10:17 +08:00
@xuboying 这个在 3.5 上也可以的嘛?当时找解决方案的时候看到了,但说是 2.7 我就没试
xuboying
2016-01-23 01:11:13 +08:00
@Cassandra 我这没 3 ,你简单改改就可以用了
xuboying
2016-01-23 01:12:32 +08:00
@fy 驼峰很好识别的
Cassandra
2016-01-23 01:13:27 +08:00
@fy 谢谢!只是初学者这些我都不知道啊,我都不知道这种命名方式叫驼峰法则。。。这是老师硬性规定的不能怪我呀。对于目前的我而言,我能知道他是啥就可以了,其他都不重要~~~嘤嘤嘤
Cassandra
2016-01-23 01:14:57 +08:00
@gccplus 可是我的实际运用有好多 key 这么写好累,有没有更简便的方法呢?
fy
2016-01-23 01:22:49 +08:00
@Cassandra 可以啊 我这里就是 3 。实际输入数据的话,楼主你要看输入的方式了,比如源文件是一行 key 一行 value ,或者源文件是 csv 格式,源文件是 json 格式等等……

如果数据比较少打算直接写在代码里,简单的 KV 数据基本上打开编辑器一条正则替换就搞定啦!

老师规定的话就按老师的走了。
RqPS6rhmP3Nyn3Tm
2016-01-23 01:34:51 +08:00
懒得看回复了…我觉得用一个 list 套就可以了啊
RqPS6rhmP3Nyn3Tm
2016-01-23 01:35:36 +08:00
原来楼主有老师啊… Python 我感觉还是自学效率比较高

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/252765

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX