从具有多个值的字典键中为单个键分配单个值
问题描述:
我已经看到很多论坛为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将是唯一的(不重复/倍数的机会)
答
你需要嵌套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}
如果一个ID在多个列表中,该怎么办? – timgeb
有没有可能一个'id'可以在多个'value'列表中? –
你需要指定你想如何处理碰撞。你想保持多个值吗? – purpletentacle