【问题标题】:The most efficient way to convert a string with keys and values into a python dict将带有键和值的字符串转换为python dict的最有效方法
【发布时间】:2019-04-13 05:58:53
【问题描述】:

如何转换字符串

{"key"=>"Number of Contents in Sales Package", "value"=>"Pack of 3"}

这样的字典
{'Number of Contents in Sales Package':'Pack of 3'}?

【问题讨论】:

  • 您的实际字符串是包含多个键值对还是仅包含一个?

标签: python regex string dictionary


【解决方案1】:

这是一种方法,它稍微拆分和清理字符串,然后在奇数和偶数列表元素(键是偶数,值是奇数)的切片上使用带有zip() 的dict理解来生成您正在寻找的输出(并且适用于包含多个键值对的字符串,但如果您的字符串包含嵌套的字典、列表等,则效果不佳)。

也就是说,@jpp 的回答真的很聪明。

text = '{"key"=>"Number of Contents in Sales Package", "value"=>"Pack of 3"}'

items = [t.split('=>')[1].replace('"', '') for t in text[1:-1].split(',')]
result = {k: v for k, v in zip(items[::2], items[1::2])}

print(result)
# OUTPUT
# {'Number of Contents in Sales Package': 'Pack of 3'}

【讨论】:

    【解决方案2】:

    你可以这样做:

    result = dict([k_v.replace('"', '').split('=>')
                   for k_v in string[1:-1].split(', ')])
    

    这将要求您的数据采用以下形式:

    '{key1=>value1, key2=>value2}'
    

    【讨论】:

    • 这对我不起作用,它给了{'"key"': '"Number of Contents in Sales Package"', '"value"': '"Pack of 3"'}
    • 啊,我明白你的意思了。您的实际字符串中是否包含多个键值对?
    • 我不确定,最好问问 OP,似乎不是来自示例。
    • 我的错;我以为你是 OP!
    【解决方案3】:

    re 与具有多个键值对的示例一起使用

    import re
    
    s = """{"key"=>"Number of Contents in Sales Package", "value"=>"Pack of 3"}, 
        {"key"=>"Number of Contents in Sales Package 2", "value"=>"Pack of 5"}"""
    
    pattern = re.compile(r'''{"key"=>"(?P<key>.*?)", "value"=>"(?P<value>.*?)"}''')
    dict(pattern.findall(s))
    
    {'Number of Contents in Sales Package': 'Pack of 3',
     'Number of Contents in Sales Package 2': 'Pack of 5'}
    

    【讨论】:

      【解决方案4】:

      您可以使用str.replace 然后ast.literal_eval 将您的字符串转换为字典,然后重组:

      from ast import literal_eval
      
      x = '{"key"=>"Number of Contents in Sales Package", "value"=>"Pack of 3"}'
      
      d = literal_eval(x.replace('=>', ':'))
      d = {d['key']: d['value']}
      
      print(d)
      
      {'Number of Contents in Sales Package': 'Pack of 3'}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-10
        • 2012-11-06
        • 2022-01-16
        • 2023-03-06
        • 2022-12-07
        • 2017-12-30
        • 1970-01-01
        相关资源
        最近更新 更多