2014-10-18 163 views
0

我有一組通過XHR請求從網站返回的嵌套列表。所使用的技術是上的json.loads。嵌套列表看起來是這樣的:將嵌套列表轉換爲字典鍵和值

[[[[u'goal', u'openplay', u'leftfoot', [2]], 
    [u'goal', u'openplay', u'rightfoot', [7]], 
    [u'goal', u'owngoal', u'rightfoot', [1]], 
    [u'miss', u'corner', u'header', [1]], 
    [u'miss', u'corner', u'otherbodypart', [1]], 
    [u'miss', u'corner', u'rightfoot', [2]], 
    [u'miss', u'crossedfreekick', u'leftfoot', [1]], 
    [u'miss', u'crossedfreekick', u'rightfoot', [6]], 
    [u'miss', u'openplay', u'header', [2]], 
    [u'miss', u'openplay', u'leftfoot', [11]], 
    [u'miss', u'openplay', u'rightfoot', [31]], 
    [u'miss', u'throwin', u'rightfoot', [1]]]]] 

假設這個嵌套列表已投入變量events我使用下面的代碼:

for y in events[0]: 
    for sub in y: 
     print sub 

我得到這樣的輸出:

[u'goal', u'openplay', u'leftfoot', [2]] 
[u'goal', u'openplay', u'rightfoot', [7] 
... 
... 
... 
[u'miss', u'openplay', u'leftfoot', [11] 
[u'miss', u'openplay', u'rightfoot', [31] 

但是,我想要的是將嵌套列表的第一部分,即u'goal', u'openplay', u'leftfoot'轉換爲字典的關鍵字和值的第二部分,即[1]。這將使上面看起來像這樣:

{"'goal', u'openplay', u'leftfoot'":2} 
{"'goal', u'openplay', u'rightfoot'":7} 
... 
... 
... 
{"'miss', u'openplay', u'leftfoot'":11} 
{"'miss', u'openplay', u'rightfoot'":31} 

我真的不知道如何實現這最後一步雖然。

+0

*使用的技術是json.loads on response.text。*使用'response.json()'代替。 – 2014-10-18 13:44:43

+0

順便提一下,你的示例輸出對於單獨的字典沒有多大意義。我的答案給你*一個*字典,將你請求的鍵作爲元組。畢竟,字典鍵仍然是一個對象。 – 2014-10-18 14:32:18

回答

1

您可以將前三個元素轉換爲該元組的元組。這可以用一個字典解析來完成:

{tuple(sub[:3]): sub[3][0] for y in events[0] for sub in y} 

所以第3個元件被製作成一個元組密鑰,並從所述第四元件的整數是展開的字典值。

演示:

>>> from pprint import pprint 
>>> events = [[[[u'goal', u'openplay', u'leftfoot', [2]], [u'goal', u'openplay', u'rightfoot', [7]], [u'goal', 
... u'owngoal', u'rightfoot', [1]], [u'miss', u'corner', u'header', [1]], [u'miss', u'corner', 
... u'otherbodypart', [1]], [u'miss', u'corner', u'rightfoot', [2]], [u'miss', u'crossedfreekick', 
... u'leftfoot', [1]], [u'miss', u'crossedfreekick', u'rightfoot', [6]], [u'miss', u'openplay', u'header', 
... [2]], [u'miss', u'openplay', u'leftfoot', [11]], [u'miss', u'openplay', u'rightfoot', [31]], [u'miss', 
... u'throwin', u'rightfoot', [1]]]]] 
>>> {tuple(sub[:3]): sub[3][0] for y in events[0] for sub in y} 
{(u'goal', u'owngoal', u'rightfoot'): 1, (u'miss', u'corner', u'header'): 1, (u'miss', u'corner', u'otherbodypart'): 1, (u'goal', u'openplay', u'leftfoot'): 2, (u'miss', u'openplay', u'rightfoot'): 31, (u'miss', u'corner', u'rightfoot'): 2, (u'miss', u'crossedfreekick', u'rightfoot'): 6, (u'miss', u'throwin', u'rightfoot'): 1, (u'miss', u'openplay', u'header'): 2, (u'goal', u'openplay', u'rightfoot'): 7, (u'miss', u'openplay', u'leftfoot'): 11, (u'miss', u'crossedfreekick', u'leftfoot'): 1} 
>>> pprint(_) 
{(u'goal', u'openplay', u'leftfoot'): 2, 
(u'goal', u'openplay', u'rightfoot'): 7, 
(u'goal', u'owngoal', u'rightfoot'): 1, 
(u'miss', u'corner', u'header'): 1, 
(u'miss', u'corner', u'otherbodypart'): 1, 
(u'miss', u'corner', u'rightfoot'): 2, 
(u'miss', u'crossedfreekick', u'leftfoot'): 1, 
(u'miss', u'crossedfreekick', u'rightfoot'): 6, 
(u'miss', u'openplay', u'header'): 2, 
(u'miss', u'openplay', u'leftfoot'): 11, 
(u'miss', u'openplay', u'rightfoot'): 31, 
(u'miss', u'throwin', u'rightfoot'): 1} 

注意requests給你直接訪問解碼JSON響應;使用response.json()而不是在response.contentresponse.text上使用json.loads()

+0

感謝您的回覆。你的答案看起來不錯。我會稍後測試它,如果它適合我​​,請接受答案。 – gdogg371 2014-10-18 15:30:34

+0

順便說一句,它不是我低估你的答案! – gdogg371 2014-10-18 18:14:35