【问题标题】:Converting a list of lists into a dictionary of lists [duplicate]将列表列表转换为列表字典[重复]
【发布时间】:2016-08-29 15:03:18
【问题描述】:

我正在尝试转换列表列表:

x = [[1, 2], [1, 3], [1, 3, 4], [1, 2, 5]]

到一个列表字典,其中每个列表的索引是字典的键(从 1 开始):

new_dictionary = {1: [1, 2], 2: [1, 3], 3: [1, 3, 4], 4: [1, 2, 5]}

我将处理大型列表,有没有一种有效的方法?

【问题讨论】:

  • 请记住,Python 序列是 0 索引的,而不是 1 索引的。
  • 另外:你为什么想要那个?
  • @tobias_k - 我也很想知道这一点。每个键都是输入列表的索引的字典在功能上与列表相同。这似乎毫无意义。
  • 可能是XY problem的一个例子。
  • 我希望这不是 XY 问题!我要做的就是让我的数据与一些现有数据一致。不过感谢您的帮助。

标签: python list dictionary


【解决方案1】:

是的,dict 构造函数采用可迭代的元组,其中第一项是键,第二项是值。

这正是enumerate 返回的内容:

new_dictionary = dict(enumerate(x))

那么new_dictionary 将包含:

{0: [1, 2], 1: [1, 3], 2: [1, 3, 4], 3: [1, 2, 5]}

注意第一个键是0,而不是1。如果你想从一个或另一个开始,使用start=1参数和enumerate

>>> dict(enumerate(x, start=1))
{1: [1, 2], 2: [1, 3], 3: [1, 3, 4], 4: [1, 2, 5]}

不过,我对您的用例很好奇,因为列表和字典的使用方式非常相似:

>>> x[0]
[1, 2]
>>> new_dictionary[0]
[1, 2]

你确定你真的需要一本字典吗?

【讨论】:

  • 使用start=1,那就好了(假设OP真的想要那样)
  • 使用start=1,键将不再匹配原始索引。
  • 是的,例子和描述是矛盾的:“每个列表的索引是字典的键”然后从1开始。好点。
  • 太好了,这行得通。如何使用start = 1
  • @AndrewEarl,参见最后一个示例(交互式,以>>> 提示符开头)
【解决方案2】:

你应该像这样使用dict comprehension

new_dictionary = {index + 1: value for index, value in enumerate(x)}

【讨论】:

    猜你喜欢
    • 2019-11-27
    • 2020-03-19
    • 2020-11-11
    • 2018-02-08
    • 1970-01-01
    • 2011-10-17
    • 2017-10-01
    • 2015-06-02
    • 2015-10-16
    相关资源
    最近更新 更多