【问题标题】:How To Convert a List That Looks Like a DIct to a Real Dict如何将看起来像 DIct 的列表转换为真正的 dict
【发布时间】:2021-05-07 07:03:23
【问题描述】:

我正在解压缩从 API 获得的嵌套字典,因此我无法控制它。其中一个子词典以 {'A':'B'、'C':'D' 等形式的 形式出现。如何将其转换为字典,其中冒号左侧的项目是键,右侧的项目是值?如果有帮助,我正在使用 python 3。

def print_nested(dict_obj):
    # Iterate over all key-value pairs of a dict
    for key, value in dict_obj.items():
        if isinstance(value, dict):
            print_nested(value)
        else:
            if isinstance(value, list):
                print(type(value))
                print(*value)
            else:
                print(key, ':', value)

产生输出:

<class 'list'>
{'putCall': 'CALL', 'symbol': 'MSFT_031723C250', etc}

【问题讨论】:

  • " 形式为 {'A':'B', 'C':'D', etc}" - 好吧,那不可能。请提供真实的(简化的,如果合适的话)数据。
  • 请分享python代码和输出,这样会更容易理解
  • 您需要提供有争议的主张的证据。
  • @Duncan 您能否提供该列表的示例?您提供的示例看起来不像列表。
  • 您可能拥有的是 list 中的字典,如下所示:value = [{'putCall': 'CALL', 'symbol': 'MSFT_031723C250', etc}]

标签: python python-3.x list dictionary


【解决方案1】:

您的代码的输出与存在将某些未知键映射到列表的顶级字典一致,该列表又包含另一个字典。

您对列表内容有点误导,因为您正在调用 print(*value),这会将列表项解压缩为 print 的单独参数。如果你只是做了print(value)(没有*),你会看到列表中的方括号。您的列表可能只包含一项,但也有可能如果它包含多个大字典,则可能很难在输出中发现一个的结尾和下一个的开头。

如果你有像{"foo": [{"bar": 1}]} 这样的结构,我不确定你想要什么输出。您只想打印最里面的键和值吗?

那么您可能希望您的列表处理分支是这样的(尽管如果列表可能不只包含字典,您可能需要更多逻辑):

        if isinstance(value, list):
            for inner in value:
                print_nested(inner)

【讨论】:

    【解决方案2】:

    我有一种方法可以将 list 和 set 协调到 dict 中: 你知道如果你做下面的激活,你会出错:

    PSR=["hello","bye"]
    PSR=dict(PSR)
    print(PSR)
    

    现在,我想向您展示一个模块来解决您的问题: 我们有模块来命名 dict.fromkeys(list or set , value of keys),我举了一个例子:

    PSR=["hello","bye"]
    #our primitive/first list
    behave="good"
    #the value of the keys 
    PSR=dict.fromkeys(PSR,behave)
    print(PSR)
    #you will have a dict!
    

    【讨论】:

    • 欢迎来到 Stack Overflow!本帖不回答实际问题,也不解决问题中的问题。
    • 我看过这个方案,但是键是固定的,你只是在值中替换,即“hello”和“bye”都是值。在我的情况下,“你好”是关键,“再见”是价值。 @python_ged 说得对,因为它实际上是一个字典列表。
    猜你喜欢
    • 2018-10-14
    • 1970-01-01
    • 2013-12-13
    • 2021-11-28
    • 1970-01-01
    • 2019-10-16
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多