2016-03-01 105 views
1

我已經看到很多論壇爲Python中的鍵分配多個值,但沒有其他方式。我想要的是將單個鍵分配給單個值,然後將其翻轉。從具有多個值的字典鍵中爲單個鍵分配單個值

我有什麼:

myDict = {1: ['id1', 'id2', 'id3'], 2: ['id4', 'id5'], 3: ['id6']} 

我所希望做的:

myDict = {'id1': 1, 'id2': 1, 'id3': 1, 'id4': 2, 'id5': 2, 'id6': 3} 

我一直在尋找的論壇和無法弄清楚如何將一個單一的值賦給一個鍵,但我猜「炫」部分將是這個樣子:

myDict = {y:x for x,y in MyDict.iteritems()} 

任何幫助將是非常APPR eciated。

編輯: 所有的ID將是唯一的(不重複/倍數的機會)

+1

如果一個ID在多個列表中,該怎麼辦? – timgeb

+0

有沒有可能一個'id'可以在多個'value'列表中? –

+0

你需要指定你想如何處理碰撞。你想保持多個值嗎? – purpletentacle

回答

3

你需要嵌套2個解析,因爲您的原始字典中的每個鍵值對都有一個值列表。

如何

{id:x for x,y in myDict.iteritems() for id in y} 
1

既然你不能在整個列表重複的ID,一個相對簡單的理解可以做到這一點:

>>> myDict = {1: ['id1', 'id2', 'id3'], 2: ['id4', 'id5'], 3: ['id6']} 
>>> {id:k for k,lst in myDict.iteritems() for id in lst} 
{'id6': 3, 'id4': 2, 'id5': 2, 'id2': 1, 'id3': 1, 'id1': 1} 
1

您可以通過實現這一點:

dict((x,k) for k, v in myDict.iteritems() for x in v) 

OR:

{x: k for k, v in myDict.iteritems() for x in v} 

OR(不是一個Python的方法):

reverse_dict = {} 
for k in a: 
    for x in myDict[k]: 
     reverse_dict[x] = k 
0

SOLUTION:

{id:x for x,y in myDict.iteritems() for id in y} 
相關問題