【发布时间】:2022-01-24 21:25:36
【问题描述】:
我有多个列表,我需要将它们组合成具有多个键值对的字典列表,其中值本身可以包含一个列表 - 例如:
namesIDs = [1, 2, 3, 4, 5]
namesList = ['jacksparrow', 'aragron', 'harrypotter', 'bilbo', 'einstein']
address = ['addr1', 'addr2', 'addr3', 'addr4', 'addr5']
parentsIDs = [11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34, 41, 42, 43, 44, 51, 52, 53, 54, 55, 56]
parentsNames = ['Teague', 'MrsT', 'gPaT', 'gMaT', 'Arathorn', 'Gilraen', 'gPaAg', 'gMaAg', 'James', 'Lily', 'gPaHp', 'gMaHp', 'Bungo', 'Belladona', 'gPaB', 'gMaB', 'Herman', 'Pauline', 'Abraham', 'Helene', 'babyA', 'babyB']
我期待的输出是:
[{'nameIDs': 1, 'namesList': 'jacksparrow', 'address': 'addr1', 'parentsIDs': [11,12,13,14], 'parentsNames': ['Teague', 'MrsT', 'gPaT', 'gMaT']},
{'nameIDs': 2, 'namesList': 'aragorn', 'address': 'addr2', 'parentsIDs': [21,22,23,24], 'parentsNames': ['Arathorn', 'Gilraen', 'gPaAg', 'gMaAg']},
{'nameIDs': 3, 'namesList': 'harrypotter', 'address': 'addr3', 'parentsIDs': [31,32,33,34], 'parentsNames': ['James', 'Lily', 'gPaHp', 'gMaHp']},
{'nameIDs': 4, 'namesList': 'bilbo', 'address': 'addr4', 'parentsIDs': [41,42,43,44], 'parentsNames': ['Bungo', 'Belladona', 'gPaB', 'gMaB']},
{'nameIDs': 5, 'namesList': 'einstein', 'address': 'addr5', 'parentsIDs': [51,52,53,54,55,56], 'parentsNames': ['Bungo', 'Belladona', 'gPaB', 'gMaB', 'babyA', 'babyB']}
]
注意最后一项 parentsIDs/parentsNames 比其余的要长。 我尝试过使用 zip 和 dict 理解,但它对我不起作用/没有意义。
>>> namesIDs = [1, 2, 3, 4, 5]
>>> namesList = ['jacksparrow', 'aragron', 'harrypotter', 'bilbo', 'einstein']
>>> [dict(zip(('NameID', 'Name'), item )) for item in namesList]
[{'NameID': 'j', 'Name': 'a'}, {'NameID': 'a', 'Name': 'r'}, {'NameID': 'h', 'Name': 'a'}, {'NameID': 'b', 'Name': 'i'}, {'NameID': 'e', 'Name': 'i'}]
编辑: 请注意,parentsIDs 和 parentsNames 可能是任意长的。 parentsID 的第一个数字决定了 parentsID 对应的 nameID。
【问题讨论】:
-
zip不起作用,因为您的最后 2 个列表长度不等于其他 3 个 -
除非您知道这些列表是如何创建的,否则很难将它们放回字典形式。例如,在这个
[{'nameIDs': 1, 'namesList': 'jacksparrow', 'address': 'addr1', 'parentsIDs': [11,12,13,14], 'parentsNames': ['Teague', 'MrsT', 'gPaT', 'gMaT']},中,您是如何确定parentsIDs': [11,12,13,14]只是这 4 个值而不是 5 个? -
@Anu 因为他的总列表长度是 20,他想把它分成 5 个组
-
嗯,有道理。我看到了您的解决方案,看起来应该可以解决问题
-
请注意,问题中遗漏了一条关键信息(仅在答案的 cmets 中进行了澄清)。由于parentsID(和parentNames)的数量是任意长的,因此问题中没有明确的方法可以知道哪个parentsID与哪个namesID一起使用(并且它没有像@Dahal评论的那样均匀分配)。后来的 cmets 澄清了 parentsID 的 first 数字表示它与哪个 namesID 相关联(即 11-14 与 1 相关联,21-24 与 2 相关联,等等)。这应该在问题中说明。
标签: python list dictionary list-comprehension dictionary-comprehension