流動的水沒有形狀,漂流的風找不到蹤跡,任何案件的 Coding 都取決於心
唯一看透真相的是,外表看似卜朧共,智慧卻低於常人的 名卜朧共 刻爛
(謎之音:把 Code 刻到爛簡稱刻爛.爛..爛...)
Music:
#表升半音 []表高八度
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 5 4 3 4 2 6 4 5 [2] [1] #6 6 5 6
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 4 3 2 4 2 6 4 5 [2] #6 6 5 6
口白:
刻爛:真実はいつも一つ!
環境:
Python 2.7
狀況:
字典 (dictionary),要產生一個字典小 d ,
內容是以數字當 key index,然後在每個 key 給予 另一個字典
第一個 key 的 value 給數字,第二個key 的 value 給字串
就像是 json 的 物件一樣
{0:{'a':10,'b':'b1'},1:{'a':30,'b':'b2'}}
要如何實做?問問谷哥吧…沒有谷哥罩…我就廢了…
定義 一個字典小 d
d={ 0: { u'類別':10, u'日期':'2017-11-21', u'GeometryType':u'Point', u'Geometry':['155979.548274', '2554388.51285'], u'備註':u'unicode 中文字' }, 1: { u'類別':30, u'日期':'2017-11-22', u'GeometryType':u'LineString', u'Geometry':[['170491.901228', '2541243.38286'], ['170511.894158', '2541243.2872']], u'備註':u'unicode english word' }, 2: { '類別':20, '日期':'2017-11-21', 'GeometryType':'Point', 'Geometry':['155989.548274', '2554388.51285'], '備註':'中文字' }, 3: { '類別':40, '日期':'2017-11-22', 'GeometryType':'LineString', 'Geometry':[['170491.901228', '2541343.38286'], ['170511.894158', '2541343.2872']], '備註':'english word' } }
基本上 python 字典 (dictionary) ,看起來就是 json 阿…
>>> print d {0: {u'Geometry': ['155979.548274', '2554388.51285'], u'\u65e5\u671f': '2017-11-21', u'GeometryType': u'Point', u'\u985e\u5225': 10, u'\u5099\u8a3b': u'unicode \u4e2d\u6587\u5b57'}, 1: {u'Geometry': [['170491.901228', '2541243.38286'], ['170511.894158', '2541243.2872']], u'\u65e5\u671f': '2017-11-22', u'GeometryType': u'LineString', u'\u985e\u5225': 30, u'\u5099\u8a3b': u'unicode english word'}, 2: {'Geometry': ['155989.548274', '2554388.51285'], 'GeometryType': 'Point', '\xe6\x97\xa5\xe6\x9c\x9f': '2017-11-21', '\xe9\xa1\x9e\xe5\x88\xa5': 20, '\xe5\x82\x99\xe8\xa8\xbb': '\xe4\xb8\xad\xe6\x96\x87\xe5\xad\x97'}, 3: {'Geometry': [['170491.901228', '2541343.38286'], ['170511.894158', '2541343.2872']], 'GeometryType': 'LineString', '\xe6\x97\xa5\xe6\x9c\x9f': '2017-11-22', '\xe9\xa1\x9e\xe5\x88\xa5': 40, '\xe5\x82\x99\xe8\xa8\xbb': 'english word'}} >>> print d[0] {u'Geometry': ['155979.548274', '2554388.51285'], u'\u65e5\u671f': '2017-11-21', u'GeometryType': u'Point', u'\u985e\u5225': 10, u'\u5099\u8a3b': u'unicode \u4e2d\u6587\u5b57'} >>> print d[1] {u'Geometry': [['170491.901228', '2541243.38286'], ['170511.894158', '2541243.2872']], u'\u65e5\u671f': '2017-11-22', u'GeometryType': u'LineString', u'\u985e\u5225': 30, u'\u5099\u8a3b': u'unicode english word'} >>> print d[2] {'Geometry': ['155989.548274', '2554388.51285'], 'GeometryType': 'Point', '\xe6\x97\xa5\xe6\x9c\x9f': '2017-11-21', '\xe9\xa1\x9e\xe5\x88\xa5': 20, '\xe5\x82\x99\xe8\xa8\xbb': '\xe4\xb8\xad\xe6\x96\x87\xe5\xad\x97'} >>> print d[3] {'Geometry': [['170491.901228', '2541343.38286'], ['170511.894158', '2541343.2872']], 'GeometryType': 'LineString', '\xe6\x97\xa5\xe6\x9c\x9f': '2017-11-22', '\xe9\xa1\x9e\xe5\x88\xa5': 40, '\xe5\x82\x99\xe8\xa8\xbb': 'english word'}
可以看出 key 一開始定義為 unicode 與 依系統預設編碼定義的差異…
看來定義還是一致比較好…這就是為什麼老秦要統一六國,
一國一種語言、方言、貨幣、度量方法…煩都煩死了…
所以大神谷哥阿…我由衷的請求您出一套幹掉各家程式語言的語法…以後我就跟您混…(GO 有機會嗎?)
話說回來…
但…那看不懂的文字要怎麼解決?
這讓我想起古老的人類歷史中,在那個沒有mpeg、巫毒卡的年代,
玩任天堂時,看著鋸齒狀的超級瑪莉…透過大腦內插運算的獲得圓潤化效果…(現在的人類到底是進化?還是退化了!)
或者是根據人腦智慧,看謎片時,自動解碼技術…(現在的人類到底是進化?還是退化了!)
我這兩種都不會阿…更何況是 unicode 編碼、解碼技術…
>>> print repr(d[0]).decode("unicode-escape") {u'Geometry': ['155979.548274', '2554388.51285'], u'日期': '2017-11-21', u'GeometryType': u'Point', u'類別': 10, u'備註': u'unicode 中文字'} >>> print repr(d[1]).decode("unicode-escape") {u'Geometry': [['170491.901228', '2541243.38286'], ['170511.894158', '2541243.2872']], u'日期': '2017-11-22', u'GeometryType': u'LineString', u'類別': 30, u'備註': u'unicode english word'} >>> print repr(d[2]).decode("unicode-escape") {'Geometry': ['155989.548274', '2554388.51285'], 'GeometryType': 'Point', 'æ¥æ': '2017-11-21', 'é¡å¥': 20, 'å註': 'ä¸æå'} >>> print repr(d[3]).decode("unicode-escape") {'Geometry': [['170491.901228', '2541343.38286'], ['170511.894158', '2541343.2872']], 'GeometryType': 'LineString', 'æ¥æ': '2017-11-22', 'é¡å¥': 40, 'å註': 'english word'}
可以透過 repr() 定義編碼給它,這樣就可以在 console 中,
看到 字典 (dictionary) unicode 編碼的文字囉(這只是為了在 console 中看的懂而已)
那…要怎麼取 key 的 value 咧…
>>> print d[0][u'備註'] unicode 中文字 >>> print d[1][u'備註'] unicode english word >>> print d[2]['備註'] 中文字 >>> print d[3]['備註'] english word >>> print d[0]['備註'] Traceback (most recent call last): File "", line 1, in KeyError: '\xe5\x82\x99\xe8\xa8\xbb'
直接給 key 就可以取得值
不過…當初如果 key 給的是 unicode 就只能用 unicode 的 key(英數則不影響)
不然就會壞掉惹…
另外,不論 key 所存放的 value 是 字典(dictionary)、list、tuple、文字、數字…
取值得方式通通都一樣,直接給 key 就可以取得值
差別在於 list、tuple 取值時,還可以在給予 index 值
所以,跟台式路邊攤大腸包小腸的概念一樣…
大腸灌糯米,再包小腸,小腸又灌豬肉…
這讓我想到,洛哥去面試考警察時,主考官問他為什麼來當差…
洛哥說:為了吃飯…
貪了五億就是為了吃飯阿…我也想…
>>> print d[0]['Geometry'] ['155979.548274', '2554388.51285'] >>> print d[0][u'Geometry'] ['155979.548274', '2554388.51285'] >>> print d[0]['Geometry'][0] 155979.548274 >>> print d[0]['Geometry'][1] 2554388.51285
上面例子 print d[0]['Geometry']
就是列出 d 字典中 key 為 0 的字典中, key 為 Geometry 的 list
上面例子 print d[0]['Geometry'][0]
就是列出 d 字典中 key 為 0 的字典中, key 為 Geometry 的 list 中,index 為 0 的 值
上面例子 print d[0]['Geometry'][1]
就是列出 d 字典中 key 為 1 的字典中, key 為 Geometry 的 list 中,index 為 1 的 值
編碼設定方式: 設定編碼方式如下
>>> import sys >>> print 'defaultencoding:', sys.getdefaultencoding() defaultencoding: ascii >>> reload(sys)>>> sys.setdefaultencoding('utf-8') >>> print 'defaultencoding:', sys.getdefaultencoding() defaultencoding: utf-8
就算定義了編碼…在 console 中我還是無法用 print 列出字典 (dictionary) 中的中文字…
還是要透過 repr() 來轉
參考文獻:
1. In Python can we add a dictionary inside a dictionary? If yes how can we access the inner dictionary using the key in the primary dictionary?
2.stackoverflow.com:print python dictionary with utf8 values
3.Pythonの日本語処理