名單我有號碼的清單說字典和蟒蛇
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 }
我已經試過的辦法來解決這個思維但不能包裹我的手指。任何人都可以分享一個有效的方式來實現這一點 謝謝
名單我有號碼的清單說字典和蟒蛇
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 }
我已經試過的辦法來解決這個思維但不能包裹我的手指。任何人都可以分享一個有效的方式來實現這一點 謝謝
這就行了。
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
你能解釋一下它是如何工作的嗎? ,謝謝 –
在這裏通常會皺起眉頭,給出一個完整的答案,用代碼表示一個問題,顯示的工作很少,而且沒有來自提問者的代碼。你可能想刪除這個答案,我建議。 –
@RoryDaulton問題的質量對此(良)答案的質量沒有影響。我認爲這不應該被刪除。 –
這裏是做同樣的事情的另一種方式:
>>> 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}]
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}]
這裏假定'Numbers'按順序遞增 – brianpck
爲真,感謝反饋,我改變了 –
雖然這段代碼可以解決問題,但它並不能解釋爲什麼或者它如何回答問題。請[請提供您的代碼解釋](// meta.stackexchange.com/q/114762/269535),因爲這確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 **旗幟/評論者:** [僅代碼解答,例如這個,downvote,不要刪除!](// meta.stackoverflow.com/a/260413/2747593) –
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 }]
你去!
[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']'。 –
看起來像你希望我們做你的功課 – FeedTheWeb
請更具體地在你的「想法解決這個問題」,特別是你嘗試過的任何代碼。我們很少從頭開始編寫代碼:您需要顯示更多自己的努力。 –