本来不想上 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
![]() | 1 ipconfiger 2016-01-23 00:51:56 +08:00 ![]() 数据结构本身就决定了没可能啊, 好好学学数据结构先 绕弯能实现, 蛋痛 |
![]() | 2 fy 2016-01-23 00:54:36 +08:00 ![]() 我也觉的这是一个不好的地方,有序字典不是不 work ,是你先创建了一个标准字典,然后标准字典转换成了无序字典。 换一种创建方式就好了 OrderedDict((('c', 3), ('a',1), ('b',2))) 我觉得这确实是个问题 |
![]() | 3 zeyexe 2016-01-23 00:55:19 +08:00 ![]() OrderedDict 是可以实现顺序输出的,也许你的用法有误。 |
![]() | 4 leavic 2016-01-23 00:56:57 +08:00 ![]() |
![]() | 5 Cassandra OP @ipconfiger 完全没可能嘛?你说的绕弯是什么样的方法呢?老师布置作业的时候都还没讲怎么创建 dictionary 呢~然而刚讲完创建作业就要教了 T^T |
![]() | 6 yelite 2016-01-23 00:59:13 +08:00 ![]() OrderedDict 用 tuple list 初始化就可以了, OrderedDict({'Steven':90, 'Chole':70,'Bob':100}) 这样肯定是不行的 |
![]() | 7 Cassandra OP @fy studentGrades = OrderedDict((('Steven':90), ('Chole':70),('Bob':100) 这样伐?原谅我悟性是在太差 |
![]() | 10 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]) |
![]() | 11 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 |
![]() | 12 fy 2016-01-23 01:09:45 +08:00 @Cassandra 这个姿势: student_grades = OrderedDict((('Steven',90), ('Chole',70),('Bob', 100))) 另外 Python 不用驼峰法则!命名是中间隔下划线的,函数和类方法都是这样的! |
![]() | 16 Cassandra OP @fy 谢谢!只是初学者这些我都不知道啊,我都不知道这种命名方式叫驼峰法则。。。这是老师硬性规定的不能怪我呀。对于目前的我而言,我能知道他是啥就可以了,其他都不重要~~~嘤嘤嘤 |
![]() | 18 fy 2016-01-23 01:22:49 +08:00 @Cassandra 可以啊 我这里就是 3 。实际输入数据的话,楼主你要看输入的方式了,比如源文件是一行 key 一行 value ,或者源文件是 csv 格式,源文件是 json 格式等等…… 如果数据比较少打算直接写在代码里,简单的 KV 数据基本上打开编辑器一条正则替换就搞定啦! 老师规定的话就按老师的走了。 |
19 RqPS6rhmP3Nyn3Tm 2016-01-23 01:34:51 +08:00 懒得看回复了…我觉得用一个 list 套就可以了啊 |
20 RqPS6rhmP3Nyn3Tm 2016-01-23 01:35:36 +08:00 原来楼主有老师啊… Python 我感觉还是自学效率比较高 |
![]() | 22 Cassandra OP @BXIA 因为是学校的课程嘛~~之前自学 2.7 因为不是电脑专业,也就因为其他的事情耽搁了好久。现在刚好选修课不够就捡起来学呗~~~ 至于 list ,我主要觉得调用太麻烦, dictionary 这种 key-value 对定的方式我觉得比较简单啦~~(其实就是懒=_= |
![]() | 23 zeroten 2016-01-23 01:40:26 +08:00 via Android 好奇哪个学校教 Python ? |
![]() | 24 Cassandra OP @zeroten 不是国内的学校啦~~这个只是作为电脑专业的基础课程啦~~~像我这种非专业的人就只能学学这种基础的东西,算法什么都接触不到呢⊙⊙ |
25 RqPS6rhmP3Nyn3Tm 2016-01-23 01:42:59 +08:00 @Cassandra 最近写爬虫我也在折腾 Python …同好奇哪个学校会教? |
27 RqPS6rhmP3Nyn3Tm 2016-01-23 01:55:15 +08:00 via iPad @Cassandra 不知道……即将出国党…… |
28 RqPS6rhmP3Nyn3Tm 2016-01-23 01:57:05 +08:00 via iPad @Cassandra 是北美吗?似乎那边教 Python 的比较多啊 |
33 SharkIng 2016-01-23 06:42:44 +08:00 |
![]() | 34 Perry 2016-01-23 07:00:33 +08:00 题外话,学完 python 建议学下 Java 的 Data Structure |
![]() | 35 yelite 2016-01-23 08:12:25 +08:00 情侣头像好赞,和以前的画风不一样了 |
![]() | 36 DuckJK 2016-01-23 08:31:17 +08:00 ![]() |
![]() | 37 florije 2016-01-23 08:33:35 +08:00 ![]() 按照你输入的顺序来输出的话最简单的就是 OrderedDict 了的,他能记录你放入的顺序。 from collections import OrderedDict sap_dict = OrderedDict() sap_dict['A'] = 1 sap_dict['B'] = 2 sap_dict['C'] = 3 print(sap_dict) for key, value in sap_dict.items(): print(key, value) result : OrderedDict([('A', 1), ('B', 2), ('C', 3)]) A 1 B 2 C 3 |
![]() | 38 florije 2016-01-23 08:34:25 +08:00 不过话说你的程序猿小伙伴没能帮你解决么~ |
![]() | 39 xiamingchong 2016-01-23 09:27:09 +08:00 换用世界上最好的语言,就不会遇到这种问题 |
41 SharkIng 2016-01-23 11:50:47 +08:00 @fy https://www.python.org/dev/peps/pep-0008/#descriptive-naming-styles 这里不是也提到了驼峰?感觉驼峰在命名规则里面还是很常见的。不过的确 Python 的程序很多都是_A_B 这样的命名,不过总的来说也不能完全说是错误的,最多只是习惯不符合标准罢了 |
![]() | 42 mashpolo 2016-01-23 12:39:03 +08:00 json.dumps(studentGrades) 转成 json 数据打印出来就好了 |
![]() | 43 Executable 2016-01-23 13:00:46 +08:00 @zeroten 北京市某知名大学 |
![]() | 47 Cassandra OP @xiamingchong 我也想啊,这门课是学 python |
![]() | 49 Cassandra OP @Executable 都说在国外的初学者了,莫名被黑的赶脚 |
![]() | 51 TheCure 2016-01-23 13:19:20 +08:00 orderDict 可以实现 但是 orderDict 在某些情况下不好用的话 我会用一个 list 维护顺序 |
52 chrishine 2016-01-23 14:20:50 +08:00 golang map value is unaddressable |
![]() | 53 zhanzhan 2016-01-23 14:31:25 +08:00 via iPhone 悄悄岔一下 晚点再看 |
54 RqPS6rhmP3Nyn3Tm 2016-01-23 14:42:19 +08:00 @SharkIng 的确, Python 驼峰似乎用的不多,较多的还是下划线 我本来是驼峰的,被硬生生改过来了 |
55 tairan2006 2016-01-23 15:22:57 +08:00 也是醉了…用哈希表初始化红黑树。。 python 只有类名是驼峰的,其他的基本全是下划线,参考 PEP8 |
57 chuan 2016-01-23 15:46:59 +08:00 字典要有序的思想是不是从 C++那里来的啊, C++里的 map 默认是有序的(一般是二叉树实现), unorderd_map 是无序的( hash 表实现),在直接读取上, unorderd_map 应该更快。 python 里默认 dict 是无序的,不过 unorderd_dict 依然还是 hash 表实现,读取速度上表现应该相当,其他方面的损失我就不太清楚了。 |
58 chuan 2016-01-23 15:53:52 +08:00 不好意思,上面一条的 python unorderd_dict 写错了,是 collections.OrderdDict , |
59 chuan 2016-01-23 15:55:25 +08:00 又拼错了,是 collections.OrderedDict 。。。。忽略我。。。。 |
61 slfmessi 2016-01-23 17:44:36 +08:00 @kqz901002 [PEP8]( https://www.python.org/dev/peps/pep-0008/#naming-conventions) 中有 Python 的命名约定,虽然我个人也更喜欢驼峰一点 |
![]() | 63 kqz901002 2016-01-23 17:52:08 +08:00 @slfmessi 我就是说的这个文档啊,这个文档没有说不建议驼峰命名啊, OrderedDict 本身就是驼峰命名, studentGrades 是首字母小写的驼峰命名法, pep8 的建议是有统一的,易读的命名规则 |
![]() | 64 fy 2016-01-23 18:04:05 +08:00 @kqz901002 大哥 下划线命名是变量名和函数名啊, OrderedDict 是驼峰没错,但这是类名啊! 我之前也说了公司或者老师要求的编码规范最大。除此之外, Python 大多数库通行的规则就是小写下划线。当然有些著名的库不是,我们都知道那些库很多年头了或者本身就是从 java 复刻的。 通行不通行这也不是我钦定的,我举个例子 def helloWorld(): pass 在 PyCharm 下: Function name should be lowercase 在 Vim 插件 ycm 下(用的是 jedi 还是 pylint 我忘了) [invalid-name] Invalid function name "helloWorld" 我再重复一次,当前要求的编码规范最大。而 Python 最通行的函数名变量名命名规则是小写下划线。 |
![]() | 65 Executable 2016-01-23 18:35:35 +08:00 @Cassandra 讲真啊,我北航的同学,非计算机类,学 python ,还要做 0-1 背包 |
![]() | 69 Cassandra OP @tairan2006 @ethego @kqz901002 @fy @BXIA 看你们争论命名方式很有意思。但是 python 也只是建议下划线的命名方式,并不是说驼峰就一定不可以。尽管统一的命名方式在团队合作 或者与别人共享代码的时候读起来比较方便,但是个人也有个人的习惯,我也不觉得非要强制成一个样。 PS :我觉得下划线破坏了单词的美感 |
![]() | 71 ethego 2016-01-23 23:37:18 +08:00 @Cassandra 自己写给自己看就算了,但是一旦要发布出去供别人阅读、或者进行团队协作,会给其他人造成很大的困扰,因为大家默认把驼峰看成类名。如果在公司这么写,我想同事对这个人的印象会不太好,因为无形之间增加了很多沟通的成本。很多时候, pep8 的“建议”就是强制性的。 |
![]() | 80 kqz901002 2016-01-24 12:19:04 +08:00 |
![]() | 83 LokiSharp 2016-01-25 15:24:31 +08:00 ![]() 处理字典我会这样加一段 t = list() for key,val in dictionary t.append((val,key)) t.sort(reverse=True) |
84 kkzxak47 2016-01-26 22:45:33 +08:00 ![]() 不想用 OrderedDict 的话,那就配合一个 list 或者 tuple 来用好了。 比如 lst = ['alice', 'bob', 'clare'] d = {'clare': 100, 'bob': 90, 'alice': 80} for key in lst: print(key, d[key]) ('alice', 80) ('bob', 90) ('clare', 100) |