【问题标题】:In python how do I change dictionary values from strings into dictionaries?在 python 中,如何将字典值从字符串更改为字典?
【发布时间】:2019-07-17 08:30:53
【问题描述】:

我的字典格式为:d={741178: u'{"width":37.8365,"height":150,"length":234},{"width":35.7,"height":178,"length":122}',741179: u'{"width":98.67,"height":180,"length":994},{"width":98.79,"height":167.8,"length":154.22}'}

我怎样才能把它变成一本字典?我试过了:

for k, v in d.items():
    v = ast.literal_eval(v)

但这不起作用。由于我的每个伪嵌套字典实际上都是一个字符串,我该如何更改它们在字典中的数据类型?

【问题讨论】:

    标签: python dictionary nested


    【解决方案1】:

    您可以使用ast.literal_eval()json.loads(),在这种情况下输出几乎相同。但是,对于 JSON,您必须将字符串括在方括号中,因为它们都包含两个用逗号分隔的字典,因此获取它们的唯一合理方法是作为字典列表。对于 Python 文字,省略方括号(或用括号替换它们)会导致每对以逗号分隔的字典被解释为 2 元组(应该是双精度,但已经有不同的含义)。

    我个人推荐使用json.loads(),因为JSON目前是新项目中最常用的数据交换格式。如果您的字符串源可以添加方括号以生成有效的 JSON,那将是最好的。

    import ast
    import json
    
    d = {741178: u'{"width":37.8365,"height":150,"length":234},{"width":35.7,"height":178,"length":122}',
         741179: u'{"width":98.67,"height":180,"length":994},{"width":98.79,"height":167.8,"length":154.22}'}
    
    p = {k: ast.literal_eval(v)   for k, v in d.items()}
    j = {k: json.loads('['+v+']') for k, v in d.items()}
    
    print(p)
    print(j)
    
    # {741178: ({'width': 37.8365, 'height': 150, 'length': 234}, {'width': 35.7, 'height': 178, 'length': 122}), 741179: ({'width': 98.67, 'height': 180, 'length': 994}, {'width': 98.79, 'height': 167.8, 'length': 154.22})}
    # {741178: [{'width': 37.8365, 'height': 150, 'length': 234}, {'width': 35.7, 'height': 178, 'length': 122}], 741179: [{'width': 98.67, 'height': 180, 'length': 994}, {'width': 98.79, 'height': 167.8, 'length': 154.22}]}
    

    如你所见,唯一的区别是( )[ ]

    【讨论】:

    • 非常感谢,这是最有帮助的!
    【解决方案2】:

    我已经更正了 json 并删除了不必要的双引号和逗号 如果要将字典作为值,则必须将值作为字典数组。

    import json    
    d={741178:
           u'{"width":37.8365,"height":150,"length":234},'
           u'{"width":35.7,"height":178,"length":122}',
       741179: u'{"width":98.67,"height":180,"length":994},'
               u'{"width":98.79,"height":167.8,"length":154.22}'
    
       }
    for key, value in d.items():
        d[key]= json.loads('['+value+']')
    print(d)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多