【问题标题】:How to convert 2 list in a python dict?如何在python dict中转换2个列表?
【发布时间】:2020-07-03 04:16:49
【问题描述】:

当我压缩 2 个列表以创建一个 python 字典时,只返回一个 k,v,但我的 2 个列表的长度 = 5。

我的列表如下所示:

Date_List = ['2019-11-04', '2019-11-04', '2019-11-04', '2019-11-04', '2019-11-04']
Gains_List = [0.0, -0.16873767942313656, 0.7362161773647236, -0.13807995856330857, 0.2844974266425382]

两者的长度是相等的,所以,我尝试使用dict理解创建一个dict:

accumulated = {k: v for k, v in zip(new_data_list, ganhos)}

但是,当我打印累积时,返回只有一个值,例如:

{'2019-11-04': 0.2844974266425382}

发生的另一件事是日期 '2019-11-04' 的值 0.00 但是当我压缩时,dict 获取 Gains_List 中的最后一个值并放入在字典中的第一个值中。

结果应该是这样的:

{2019-11-04: 0.000000, 2019-11-05: -0.168738, 2019-11-06: 0.736216, 2019-11-07: -0.138080, 2019-11-08: 0.284497}

【问题讨论】:

  • 其他日期是从哪里来的?您的第一个列表只有 2019-11-04
  • 键在字典中总是唯一的。你的 5 把钥匙是一样的,所以只保留最后一把。
  • 正如@schwobaseggl 所说,键在字典中是唯一的。我认为您想要的可能是元组列表,例如[('2019-11-04', 0.0), ('2019-11-04', -0.16...), ...]。您可以像这样创建一个元组列表accumulated = [(Date_List[i], Gains_List[i]) for i in range(len(Date_List))]
  • 对不起,伙计们。现在,在@MadsNielsen 向我展示了日期之后,我发现在创建日期时,我选择了错误的字段。很抱歉您在这篇文章上花费的时间。

标签: python list dictionary zip dictionary-comprehension


【解决方案1】:

这背后的原因是,当您迭代 zip 命令的结果时,您正在更新结果字典而不是扩展它。

zip 命令产生一个元组数组:

[('2019-11-04', 0.0), ('2019-11-04', -0.16873767942313656), ...]

然后你想从每个元组(键,值)中创建一个字典。但是键总是相同的,因此 Python 正在更新现有的键,而不是扩展字典,因为每个键都必须是唯一的。

【讨论】:

    【解决方案2】:

    您的代码实际上很好!它完全符合您的期望。但是,您肯定知道,Python 的字典具有{key: value} 的格式,其中每个键都是唯一的。这就是它出错的地方。 Date_List 中的值都是'2019-11-04',并且由于您使用它作为字典的键,因此理解会不断迭代地从0.0 更改'2019-11-04' 键下的值(Gains_List 的第一个元素)到0.2844974266425382Gains_List 的最后一个元素)。

    如果您坚持使用相同的键,则可以将其转换为元组数组,或以键和来自Gains_List 的所有值作为值的字典。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 2017-08-25
      • 1970-01-01
      • 2017-08-23
      • 2021-10-10
      相关资源
      最近更新 更多