2017-09-29 64 views
2

我列出這個清單:名單與dict

dictlist= [['AUGUSTIN', 56725, 'Mar 2016', 0, 600], ['AUGUSTIN', 56725, 'Feb 2015', 600, 600], ['BOT', 52634, 'Aug 2014, Sept 2014, Oct 2014', 291, 291]] 

而且我希望有他們組函數索引1後,和我期望的輸出應該是這樣的:

{56725: ['AUGUSTIN', 'Feb 2015', 600, 600], 52634: ['BOT', 'Aug 2014, Sept 2014, Oct 2014', 291, 291]} 

但我嘗試使用此功能:

def to_dict(lst): return {x[0]: x[1:] for x in lst} 

但我的輸出是這樣的:

{'AUGUSTIN': [56725, 'Feb 2015', 600, 600], 'BOT': [52634, 'Aug 2014, Sept 2014, Oct 2014', 291, 291]} 

我該如何解決這個問題,以便得到我想要的輸出結果?我使用Python 3.

+5

'x [1]:x [:1] + x [2:] for ...''? – jonrsharpe

+0

工作,謝謝 – Rommel

+0

爲什麼'2015年2月'比'2016年3月'更受青睞? –

回答

-1

迭代你的列表並創建一個字典。

dictlist= [['AUGUSTIN', 56725, 'Mar 2016', 0, 600], ['AUGUSTIN', 56725, 'Feb 2015', 600, 600], ['BOT', 52634, 'Aug 2014, Sept 2014, Oct 2014', 291, 291]] 

dicta = {x[1]: x[:1] + x[2:] for x in [y for y in dictlist]} 

# {56725: ['AUGUSTIN', 'Feb 2015', 600, 600], 52634: ['BOT', 'Aug 2014, Sept 2014, Oct 2014', 291, 291]} 
+0

哦,這個*是一個列表比較,抱歉。但它創建了一個字典列表,這不是OP想要的。 – jonrsharpe

+0

@akashkarothiya我認爲它被稱爲使用列表理解詞典創建。 – bhansa

+0

絕對,我同意你@bhansa –

2

使用字典理解,pop(1)提取物指標1項爲重點,其餘作爲字典項

def to_dict(lst): 
    return {x[:].pop(1): x for x in lst} 

這將返回你的願望輸出詞典的價值,但是爲了將不跟隨自正常字典以來的輸入列表將不會排列, 也有2個列表項目與索引1 56725,後面的項目將覆蓋以前的相同的密鑰,所以輸出將只保留較晚的

+0

這使原始數據產生變異 –

+0

@Jared Goguen,謝謝你指出,已經編輯了答案,先複製內部列表以避免原始數據變異 – Skycc

0

我didn' t看到任何問題:

dictlist= [['AUGUSTIN', 56725, 'Mar 2016', 0, 600], ['AUGUSTIN', 56725, 'Feb 2015', 600, 600], ['BOT', 52634, 'Aug 2014, Sept 2014, Oct 2014', 291, 291]] 
def to_dict(lst): 
    return {x.pop(1):x for x in lst} 

to_dict(dictlist) 
+0

但是它修改了列表,所以可以使用x.copy() –