首页 > 解决方案 > 使用python从字符串创建字典

问题描述

我想从下面这样的字符串创建一个字典

" Car : 100 Bus: 200 Travel cost = 500 cycle : 10 bike : 50 "

输出应如下所示

{ 'car' : 100 , 'bus' : 200, 'Travel cost' : 500 ,  'cycle' : 10 , 'bike' : 50}

它在字符串中有“:”和“=”,所以我不明白该怎么做,请帮助我。我试过了:

Dict = dict((x.strip(), y.strip()) for x, y in (element.split(':') for element in string.split(' ')))

标签: python

解决方案


解析字符串非常困难,但让我们假设字符串中的模式是:

'\D+ : \d+ \D+ : \d+'

其中\D是一个字符\d是一个数字并除以:,您可以进行如下操作。

  • 清理字符串并替换=:
  • 查找 '\D+ : \d' 的所有模式
  • 循环找到的模式并转换为字典

例如

import re
input_str = "Car : 100 Bus: 200 Travel cost = 500 cycle : 10 bike : 50 "
input_str = input_str.replace('=', ':')

dict_elements = re.findall(r'\D+ : \d+ ', input_str)

my_dict = {}
for element in dict_elements:
    key, val = element.split(':')
    key = key.strip()
    val = int(val.strip())
    my_dict[key] = val

print(my_dict)

实际上,处理 : 之前和之后可能的空格的更好解决方案如下

import re
input_str = "Car:100 Bus: 200 Travel cost = 500 cycle: 10       bike      :50    "

dict_elements = re.findall(r'\s*(\D+)\s*[:=]\s*(\d+)\s*', input_str)

my_dict = {}
for element in dict_elements:
    my_dict[element[0].strip()] = int(element[1].strip())

print(my_dict)

注意我用 [:=] 处理:=在 findall 的搜索字符串中,而 key 是 (\D+) 而 val 是 (\d+)。


推荐阅读