2015-11-18 25 views
6

我有兩個列表,如下所示。創建具有兩個值的字典時缺失的值

count = (1, 0, 0, 2, 0, 0, 1, 1, 1, 2) 
bins = [[2.0, 3.0], [3.0, 4.0], [4.0, 5.0], [5.0, 6.0], [6.0, 7.0], [7.0, 8.0], [8.0, 9.0], [9.0, 10.0], [10.0, 11.0], [11.0, 12.0], [12.0]] 

我試圖創建一個字典使用以下;

dictionary = dict(itertools.izip(count, bins)) 

,這讓我{"0": [7.0, 8.0], "1": [10.0, 11.0], "2": [11.0, 12.0]}

它只是只給出了唯一的密鑰值,但我需要得到所有對如下。

{"0": [3.0, 4.0],"0": [4.0, 5.0],"0": [6.0, 7.0],"0": [7.0, 8.0], "1": [2.0, 3.0],"1": [8.0, 9.0], "1": [9.0, 10.0], "1": [10.0, 11.0], "2": [6.0, 7.0] ,"2": [11.0, 12.0]} 

或以上詞典鍵和值的交換是可以接受的。(因爲鍵應該是唯一的) 我怎麼能這樣做?

+1

不能使用'list'作爲重點因爲它們是可變的。使用'元組'會起作用。 –

+0

如果交換是可以接受的,你能告訴我們你真的想要做什麼嗎?這看起來像XY問題。在相關說明中,只是'itertools.izip(count,lst)'有什麼問題? –

+0

@MadPhysicist我需要使用這兩個列表創建Json –

回答

3

您不能使用list作爲關鍵,字典,因爲它是可變的。

你可以轉換listtuple

>>> count = (1, 0, 0, 2, 0) 
>>> bins = [[2.0, 3.0], [3.0, 4.0], [4.0, 5.0], [5.0, 6.0], [6.0, 7.0], [7.0, 8.0]] 

>>> {tuple(key): value for (key, value) in zip(bins, count)} 
{(4.0, 5.0): 0, 
(3.0, 4.0): 0, 
(5.0, 6.0): 2, 
(2.0, 3.0): 1, 
(6.0, 7.0): 0} 

如果你想序列化到json,密鑰必須是字符串。你可以轉換箱,而不是字符串:

>>> {str(key): value for (key, value) in zip(bins, count)} 
{'[2.0, 3.0]': 1, '[4.0, 5.0]': 0, '[6.0, 7.0]': 0, '[5.0, 6.0]': 2, '[3.0, 4.0]': 0} 

>>> import json 
>>> json.dumps(_) 
'{"[2.0, 3.0]": 1, "[4.0, 5.0]": 0, "[6.0, 7.0]": 0, "[5.0, 6.0]": 2, "[3.0, 4.0]": 0}' 

另外,剛連載的對,並在接收端的詞典:

>>> zip(bins, count) 
[([2.0, 3.0], 1), ([3.0, 4.0], 0), ([4.0, 5.0], 0), ([5.0, 6.0], 2), ([6.0, 7.0], 0)] 

>>> import json 
>>> json.dumps(_) 
'[[[2.0, 3.0], 1], [[3.0, 4.0], 0], [[4.0, 5.0], 0], [[5.0, 6.0], 2], [[6.0, 7.0], 0]]' 
+0

有沒有辦法將其轉換爲Json格式? –

+0

@ManuraOmal這是一個不同的問題。簡短的回答,是的,試試吧。如果它不起作用,搜索。 –

+0

@ManuraOmal我以前沒有用python的'json'。我剛剛嘗試過,鑰匙需要是字符串。我將更新答案,以便將字符串作爲鍵而不是元組 –

2

{"0": [3.0, 4.0],"0": [4.0, 5.0]}不是有效的詞典,因爲詞典中的鍵必須是唯一的。如果你真的想在count的條目是你的鑰匙,我能想到的最好的事情就是讓值的list每個鍵:

count = (1, 0, 0, 2, 0, 0, 1, 1, 1, 2) 
bins = [[2.0, 3.0], [3.0, 4.0], [4.0, 5.0], [5.0, 6.0], [6.0, 7.0], [7.0, 8.0], [8.0, 9.0], [9.0, 10.0], [10.0, 11.0], [11.0, 12.0], [12.0]] 
answer = {} 
for c, b in zip(count, bins): 
    if c not in answer: answer[c] = [] 
    answer[c].append(b) 
+0

我得到的結果是 - {{:<<內置函數bin>,<內置函數bin>,<內建函數bin>,,<內置函數庫>,<內置函數庫>,<內置函數庫>],2:[<內置函數庫>函數bin>,<內置函數bin>]}' –

+0

@ManuraOmal:oops!對於那個錯字感到抱歉。現在已經修復了 – inspectorG4dget

+0

非常感謝。它給不是預期的,但我可以用你的答案管理 –

相關問題