Python 3 有序字典的问题,这里的 字典格式 怎么是([])这种形式,字典不是{}???

2018-08-03 11:56:19 +08:00
 bestehen
od = OrderedDict([('a', 1), ('c', 2), ('b', 3)])
od
OrderedDict([('a', 1), ('c', 2), ('b', 3)])
test=collections.OrderedDict()
test['张三'] = 92
test['李四'] = 85
test
OrderedDict([('张三', 92), ('李四', 85)])
3540 次点击
所在节点    Python
30 条回复
whoami9894
2018-08-03 12:59:10 +08:00
看了你的发帖记录我并不想回复,甚至想 block
Tyanboot
2018-08-03 13:50:40 +08:00
myyou
2018-08-03 14:09:22 +08:00
你管它是什么格式干什么,只有拥有字典的特性,由是有序的不就行了。
你看到的只是__repr__方法让你看到的样子,你也可以让普通字典显示为([])这种格式。
megachweng
2018-08-03 14:17:48 +08:00
突然想换语言了。你真的是基础语法不看,完上手就撸吗,这问的相当于为什么 1x1 代码里面要写成 1*1 嘛
SuperMild
2018-08-03 14:30:26 +08:00
基础太薄弱,建议找本入门书从第一页开始从头到尾认真看一遍。
henices
2018-08-03 14:35:52 +08:00
张三和李四不一样,是因为张三就是张三,他不是李四啊。
ballshapesdsd
2018-08-03 14:41:23 +08:00
一天伸手好多次。。
ballshapesdsd
2018-08-03 14:45:42 +08:00
而且还很没礼貌,真实让人讨厌
xiaket
2018-08-03 15:00:12 +08:00
大家一起 block 吧...

@Livid 这种没礼貌的同学能否在站规中加以限制? 我又感觉我们需要 downvote 的功能了, 如果一个人短时间在一个节点中的回复被 downvote 太多, 禁止发帖或回复什么的.
misaka19000
2018-08-03 15:07:34 +08:00
你们可以看看楼主的这个帖子,笑死我了

/476354
misaka19000
2018-08-03 15:08:52 +08:00
ivechan
2018-08-03 15:24:19 +08:00
如果是 {k:v} 这种形式,那么在调用 OrderedDict 的“构造函数“ `__init__` 时,
你是先生成一个 无序字典{k:v},然后再传给 OrderedDict。
也就是说,你已经破坏了顺序。
所以应该用 list, tuple 这种有序结构,保证 OrderedDict 知道你的顺序。
ivechan
2018-08-03 15:25:05 +08:00
接 #12,另外,提问建议还是保留点虚心的态度。
imn1
2018-08-03 15:28:34 +08:00
@whoami9894
@xiaket
@ballshapesdsd
其实也不必太计较,感觉就是个小学生学 python 而已

@bestehen
你应该学学网上发布那个 7 岁小孩打 110,虽然紧张,但该说的都能清楚表达,记忆、表达的条理都清晰

你平时习惯 dict({"one": 1, "two": 2, "three": 3}) 这样写么?

手册都写了
>>> a = dict(one=1, two=2, three=3)
>>> b = {'one': 1, 'two': 2, 'three': 3}
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> d = dict([('two', 2), ('one', 1), ('three', 3)])
>>> e = dict({'three': 3, 'one': 1, 'two': 2})
>>> a == b == c == d == e
True

e 这种情况是最少见的,因为类似的 b 简单多了
你要明白 dict()和 OrderedDict()最主要是转换,并不是从一个 dict 变为另一个 dict

你是不是写惯了 powershell ?以为类似[ordered]@{}就搞定有序 dict 有序化
crazycabbage
2018-08-03 15:51:21 +08:00
又让他有序,又让他和字典长一个样
xiexingjia
2018-08-03 16:40:47 +08:00
#11

“ d 等于白说,没说重点” hhhh
inhzus
2018-08-03 17:05:07 +08:00
@xiexingjia 真的是听了想打人 hhh
问别人问题还有这么大爷的太可怕了
BingoXuan
2018-08-03 17:37:32 +08:00
class OtherDict:
def __init__(self,*args):
self._k = []
self._v = []
for k,v in args[0]:
self._k.append(k)
self._v.append(v)
def __getitem__(self,name):
try:
return self._v[self._k.index(name)]
except ValueError:
raise KeyError
def __repr__(self):
str_list = []
for i in range(len(self._k)):
s = str(self._k[i]) + '~' + str(self._v[i])
str_list.append(s)
return 'Oh! You want see me?' +'「'+','.join(str_list)+'」'

a = OtherDict([('a', 1), ('c', 2), ('b', 3)])

print(a) #Oh! You want see me?「 a ~ 1,c ~ 2,b ~ 3 」

a['a'] #1

随便写了一下,python 自省威力很强大,很多神奇的功能都是靠自省实现的。但初学就不要深究细节,好好写一下代码
ballshapesdsd
2018-08-03 17:41:36 +08:00
@imn1 #14
@BingoXuan #18
两位圣人让我产生了一个给小孩换尿布的既视感
imn1
2018-08-03 17:42:55 +08:00
@ballshapesdsd
其实他应该去 CSDN,而不是这里

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

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

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

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

© 2021 V2EX