从具有多个值的字典键中为单个键分配单个值

从具有多个值的字典键中为单个键分配单个值

问题描述:

我已经看到很多论坛为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

你需要嵌套2个解析,因为您的原始字典中的每个键值对都有一个值列表。

如何

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

既然你不能在整个列表重复的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} 

您可以通过实现这一点:

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 

SOLUTION:

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