【问题标题】:How to create a dictionary of dictionaries using 3 lists?如何使用 3 个列表创建字典字典?
【发布时间】:2016-12-12 11:24:03
【问题描述】:

我有 3 个列表。第一个列表包含 2 个值。第二个列表包含多个值,包括一些重复值,但它们仅在与列表 1 中的不同值匹配相同位置时才会重复。然后是第三个列表,其中包含每个项目的唯一值。

list_1 = ["Value1", "Value1", "Value2", "value1"]
list_2 = ["1111", "1234", "1111", "2468"]
list_3 = ["uniqueValue1", "uniqueValue2", "uniqueValue3", "uniqueValue4"]

我想创建 1 个以 value1 和 value 2 为键的字典,然后根据它们在列表中的位置,将其他 2 个列表作为字典。

AllData = {"Value1": "Value1Dict", "Value2": "Value2Dict"}
Value1Dict = {"1111": "uniqueValue1", "1234": "uniqueValue2", "2468": "uniqueValue4"}
Value2Dict = {"1111": "UniqueValue3"}

所以基本上我已经订购了与 Value1 和 Value 2 的位置相匹配的数据,但我需要将它分开。如果有更简单的方法可以做到这一点,那么我也愿意尝试这个建议。

【问题讨论】:

  • 不确定示例字典是否不是 100% 您想要的,或者我是否误解了您的示例输出。但是将字典嵌套成一个不是更好吗? {'Value1' : {1111 : 'UniqueValue1', 1234 : 'UniqueValue2'}} 例如?
  • 是的,对不起,你是对的。我将编辑我的示例。

标签: python python-2.7 list dictionary


【解决方案1】:

这可能是您要查找的内容,但请注意嵌套字典的顺序可能与原始 list_2list_3 值不同。

In [20]: x = {k: {} for k in list_1}

In [21]: for a, b, c in zip(list_1, list_2, list_3):
    ...:     x[a][b] = c
    ...:     

In [22]: x
Out[22]: 
{'Value1': {'1111': 'uniqueValue1',
  '1234': 'uniqueValue2',
  '2468': 'uniqueValue4'},
 'Value2': {'1111': 'uniqueValue3'}}

【讨论】:

  • 非常感谢,这似乎有效,而且似乎按照我所追求的正确顺序。为什么顺序可能并不总是相同?编辑:在进一步调查中,我看到你的意思是成对出现的顺序。这很好,重要的是正确配对。
  • 普通字典不存储数据的顺序。如果顺序很重要,请在下面查看@Batman 的答案。
【解决方案2】:
from collections import defaultdict

all_data = defaultdict(dict)
for outer_key, inner_key, value in zip(list_1, list_2, list_3):
    all_data[outer_key][inner_key] = value

【讨论】:

    【解决方案3】:

    我认为您实际上已经有了上面的答案。您可以通过以下方式嵌套字典

    Value1Dict = {"1111": "uniqueValue1", "1234": "uniqueValue2", "2468": "uniqueValue4"}
    Value2Dict = {"1111": "UniqueValue3"}
    AllData = {"Value1": Value1Dict, "Value2": Value2Dict}
    

    这应该正确嵌套字典!

    【讨论】:

    • 我应该补充一点,我在每个列表中有数百个项目,因此需要一种方法来做到这一点,而无需自己实际写出每个值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2018-09-18
    • 1970-01-01
    • 2017-11-15
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多