本来不想上 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 1
数据结构本身就决定了没可能啊, 好好学学数据结构先
绕弯能实现, 蛋痛 |
2
fy 2016-01-23 00:54:36 +08:00 1
我也觉的这是一个不好的地方,有序字典不是不 work ,是你先创建了一个标准字典,然后标准字典转换成了无序字典。
换一种创建方式就好了 OrderedDict((('c', 3), ('a',1), ('b',2))) 我觉得这确实是个问题 |
3
zeyexe 2016-01-23 00:55:19 +08:00 1
OrderedDict 是可以实现顺序输出的,也许你的用法有误。
|
4
leavic 2016-01-23 00:56:57 +08:00 1
|
5
Cassandra OP @ipconfiger 完全没可能嘛?你说的绕弯是什么样的方法呢?老师布置作业的时候都还没讲怎么创建 dictionary 呢~然而刚讲完创建作业就要教了 T^T
|
6
yelite 2016-01-23 00:59:13 +08:00 1
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 1
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 1
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 1
|
37
florije 2016-01-23 08:33:35 +08:00 1
按照你输入的顺序来输出的话最简单的就是 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 1
处理字典我会这样加一段
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 1
不想用 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) |