2016-11-03 197 views
-6

名單我有號碼的清單說字典和蟒蛇

Numbers = [1,2,3,4,5,6,7,8,9,10] 

現在我想讓字典的名單,說

List_Of_dictionary = [{'a':1 ,'b':2} ,{'a':3,'b':4} ,{'a':5 ,'b':6 } ,{'a':7 ,'b': 8 } ,{'a': 9 ,'b': 10 } 

我已經試過的辦法來解決這個思維但不能包裹我的手指。任何人都可以分享一個有效的方式來實現這一點 謝謝

+0

[This](http://stackoverflow.com/questions/209840/map-two-lists-into-a-dictionary-in-python)是相關的。此外,請記住,如果您有'a = ['a','b']'例如'a * 5'然後是'['a','b','a','b','a' 'b', 'A', 'b', 'A', 'b']'。 –

+2

看起來像你希望我們做你的功課 – FeedTheWeb

+1

請更具體地在你的「想法解決這個問題」,特別是你嘗試過的任何代碼。我們很少從頭開始編寫代碼:您需要顯示更多自己的努力。 –

回答

4

這就行了。

List_Of_dictionary = [{'a':pair[0],'b':pair[1]} for pair in zip(Numbers[::2], Numbers[1::2])] 

也可能像這樣將數字提取到單個變量。

List_Of_dictionary = [{'a': i,'b': j} for i, j in zip(Numbers[::2], Numbers[1::2])] 

這部分把每第二數目成一個列表,以便[[0,1],[2,3],[4,5] ......]

zip(Numbers[::2], Numbers[1::2]) 
現在與那些

對我們構建一個字典就像你指定

{'a': pair[0], 'b': pair[1]} 

它使用蟒蛇列表內涵https://docs.python.org/3.6/tutorial/datastructures.html#list-comprehensions

另外值得一提的是ITER工具zip_longest或python 2 izip_longest。如果列表不均勻,那麼它會將剩餘值填入None或您指定的值。 https://docs.python.org/3/library/itertools.html#itertools.zip_longest

+0

你能解釋一下它是如何工作的嗎? ,謝謝 –

+2

在這裏通常會皺起眉頭,給出一個完整的答案,用代碼表示一個問題,顯示的工作很少,而且沒有來自提問者的代碼。你可能想刪除這個答案,我建議。 –

+2

@RoryDaulton問題的質量對此(良)答案的質量沒有影響。我認爲這不應該被刪除。 –

0

這裏是做同樣的事情的另一種方式:

>>> Numbers = [1,2,3,4,5,6,7,8,9,10] 
>>> [ { 'a': x, 'b': y } for x, y in (Numbers[i:i+2] for i in range(0, len(Numbers), 2))] 
[{'a': 1, 'b': 2}, {'a': 3, 'b': 4}, {'a': 5, 'b': 6}, {'a': 7, 'b': 8}, {'a': 9, 'b': 10}] 

或者,使用zip方法,你可以把它一點點漂亮:

>>> [{'a': x, 'b': y} for x, y in zip(Numbers[::2], Numbers[1::2])] 
[{'a': 1, 'b': 2}, {'a': 3, 'b': 4}, {'a': 5, 'b': 6}, {'a': 7, 'b': 8}, {'a': 9, 'b': 10}] 
0
N= [1,2,100,101,5,6,7,8,9,10] 

# the value of the first key 'a' is the iterate step by 2 '[::2]', (every second one) 
# the second, 'b' is based on the correct index of ('i' + 1) 
# by 100 eg: the index of 100 in Numbers is 3 'Numbers.index(i)', 
# we need 101, so lets add 1 to it 'Numbers.index(i)+1', which is 4 and use 
# it as index for the final value 'Numbers[Numbers.index(i)+1]' 

dict = [{"a":i, "b":N[N.index(i)+1]} for i in N[::2]] 
print (dict) 

>>[{'a': 1, 'b': 2}, {'a': 100, 'b': 4}, {'a': 5, 'b': 6}, {'a': 7, 'b': 8}, {'a': 9, 'b': 10}] 


# for uneven lists 
N = [1,2,100,101,5,6,7,8,9,10,11] 
# check that the needed items exists, if 'i' is not the last member of N 
# (so there is/are one/more member(s) after i) else give them None, in compare to zip method 
dict = [{ "a":i, "b":N[N.index(i)+1] if i != N[-1] else None} for i in N[::2]] 
print (dict) 

>>[{'a': 1, 'b': 2}, {'a': 100, 'b': 4}, {'a': 5, 'b': 6}, {'a': 7, 'b': 8}, {'a': 9, 'b': 10}, {'a': 11, 'b': None}] 
+0

這裏假定'Numbers'按順序遞增 – brianpck

+0

爲真,感謝反饋,我改變了 –

+1

雖然這段代碼可以解決問題,但它並不能解釋爲什麼或者它如何回答問題。請[請提供您的代碼解釋](// meta.stackexchange.com/q/114762/269535),因爲這確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 **旗幟/評論者:** [僅代碼解答,例如這個,downvote,不要刪除!](// meta.stackoverflow.com/a/260413/2747593) –

-5
Numbers = [1,2,3,4,5,6,7,8,9,10] 
List_Of_dictionary = [{'a':1 ,'b':2} ,{'a':3,'b':4} ,{'a':5 ,'b':6 } ,{'a':7 ,'b': 8 } ,{'a': 9 ,'b': 10 }] 

你去!