将逗号分隔的字符串转换为 Python 中的字典

目录

Convert a comma-separated string to a Dictionary in Python

  1. 将逗号分隔的字符串转换为 Python 中的字典
  2. 在 Python 中将字典转换为逗号分隔的字符串
  3. 在 Python 中将 Dict 的字符串表示形式转换为 Dict
  4. 在 Python 中将列表中的字符串拆分为键值对 (dict)

在 Python 中将逗号分隔的字符串转换为字典

要将逗号分隔的字符串转换为字典:

  1. 使用该str.split()方法在每个逗号上拆分字符串。
  2. 在键值对之间的分隔符上拆分列表中的每个字符串。
  3. 将结果传递给dict()班级。
主程序
my_str = "name=Bobbby,country=Austria,language=German" my_dict = dict(item.split('=') for item in my_str.split(',')) # 👇️ {'name': 'Bobbby', 'country': 'Austria', 'language': 'German'} print(my_dict)

该示例使用该类dict()将逗号分隔的字符串转换为字典。

第一步是在每个逗号、分号或任何其他分隔键值对的字符上拆分字符串。

主程序
my_str = "name=Bobby,country=Austria,language=German" # 👇️ ['name=Bobby', 'country=Austria', 'language=German'] print(my_str.split(','))

下一步是使用
生成器表达式
遍历列表,并根据分隔键和值的字符拆分每个字符串。

主程序
my_str = "name=Bobby,country=Austria,language=German" my_dict = dict(item.split('=') for item in my_str.split(',')) # 👇️ {'name': 'Bobby', 'country': 'Austria', 'language': 'German'} print(my_dict)
生成器表达式用于对每个元素执行某些操作或选择满足条件的元素子集。

str.split ()方法使用定界符将字符串拆分为子字符串列表。

该方法采用以下 2 个参数:

姓名 描述
分隔器 在每次出现分隔符时将字符串拆分为子字符串
最大分裂 最多maxsplit完成拆分(可选)

如果字符串中的键和值用冒号分隔,请确保在调用方法时更新分隔符str.split()

主程序
my_str = "name:Bobby,country:Austria,language:German" my_dict = dict(item.split(':') for item in my_str.split(',')) # 👇️ {'name': 'Bobby', 'country': 'Austria', 'language': 'German'} print(my_dict)

使用字典理解将逗号分隔的字符串转换为字典

或者,您可以使用
dict comprehension

主程序
my_str = "name=Bobby,country=Austria,language=German" my_dict = {key: value for key, value in [item.split( '=') for item in my_str.split(',')]} # 👇️ {'name': 'Bobby', 'country': 'Austria', 'language': 'German'} print(my_dict)

Dict comprehensions 与list comprehensions非常相似

他们对字典中的每个键值对执行一些操作,或者选择满足条件的键值对的子集。

将数值转换为整数或浮点数

如果字典中的值是数字,请使用
int()
float()类来转换它们。

主程序
my_str = "x=0.95,y=4.55" my_dict = { key: float(value) for key, value in [item.split('=') for item in my_str.split(',')] } # 👇️ {'x': 0.95, 'y': 4.55} print(my_dict)

我们使用该类float()将每个值转换为浮点数。

int()如果需要将数值转换为整数,则可以使用该类。

在 Python 中将字典转换为逗号分隔的字符串

将字典转换为逗号分隔的字符串:

  1. 使用str.keys()orstr.values()方法获取字典的键或值的视图。
  2. 使用该str.join()方法以逗号分隔符连接键或值。
主程序
my_dict = {'name': 'Bobby', 'age': 30, 'salary': 100} # ✅ Convert a dictionary's keys to a comma-separated string keys_str = ','.join(my_dict.keys()) print(keys_str) # 👉️ 'name,age,salary' # --------------------------------------------- # ✅ Convert a dictionary's values to a comma-separated string values_str = ','.join(str(value) for value in my_dict.values()) print(values_str) # 👉️ 'Bobby,30,100'

该示例使用dict.keys()方法来获取字典键的视图。

dict.keys方法返回字典键的新视图

dict.values方法返回字典值的新视图

最后一步是使用该str.join()方法将字典的键或值连接成一个带有逗号分隔符的字符串。

主程序
my_dict = {'name': 'Bobby', 'age': 30, 'salary': 100} keys_str = ','.join(my_dict.keys()) print(keys_str) # 👉️ 'name,age,salary' values_str = ','.join(str(value) for value in my_dict.values()) print(values_str) # 👉️ 'Bobby,30,100'

str.join方法将一个可迭代对象作为参数并返回一个字符串,该字符串是可迭代对象中字符串的串联

TypeError请注意,如果可迭代对象中有任何非字符串值,该方法将引发 a 。

如果您的 iterable 包含数字或其他类型,请在调用之前将所有值转换为字符串join()

调用该方法的字符串用作元素之间的分隔符。

我们在示例中使用了逗号。如果您需要用逗号后跟空格分隔值,请确保调整调用该方法的字符串。

主程序
my_dict = {'name': 'Bobby', 'age': 30, 'salary': 100} keys_str = ', '.join(my_dict.keys()) print(keys_str) # 👉️ 'name, age, salary' values_str = ', '.join(str(value) for value in my_dict.values()) print(values_str) # 👉️ 'Bobby, 30, 100'

将字典的项目转换为逗号分隔的字符串

如果需要将字典转换为包含字典键和值的逗号分隔字符串,请使用该dict.items()方法。

主程序
my_dict = {'name': 'Bobby', 'age': 30, 'salary': 100} dict_str = ", ".join("=".join([key, str(value)]) for key, value in my_dict.items()) print(dict_str) # 👉️ name=Bobby, age=30, salary=100

dict.items
方法返回字典项((键,值)对)的新视图

主程序
my_dict = {'name': 'Bobby', 'age': 30, 'salary': 100} # 👇️ dict_items([('name', 'Bobby'), ('age', 30), ('salary', 100)]) print(my_dict.items())

我们使用该join()方法使用等号分隔符连接每个键值对,然后join()再次使用该方法使用逗号分隔符连接键值对。

将 Dict 的字符串表示形式转换为 Python 中的 Dict

使用该ast.literal_eval()方法将字典的字符串表示形式转换为字典。

ast.literal_eval()方法允许我们安全地评估包含 Python 文字的字符串。

主程序
from ast import literal_eval import json my_str = '{"id": 0, "name": "Bobby", "salary": 100}' my_dict = literal_eval(my_str) print(my_dict) # 👉️ {'id': 0, 'name': 'Bobby', 'salary': 100} print(type(my_dict)) # 👉️ <class 'dict'>

该示例使用该ast.literal_eval()方法将字典的字符串表示形式转换为实际字典。

ast.literal_eval
方法允许我们安全地评估包含 Python 文字

字符串。

字符串可能由字符串、字节、数字、元组、列表、字典、集合、布尔值和 None 组成。

使用 json.loads() 将 Dict 的字符串表示形式转换为 Dict

或者,您可以使用该json.loads()方法。

主程序
import json my_str = '{"id": 0, "name": "Bobby", "salary": 100}' my_dict = json.loads(my_str) print(my_dict) # 👉️ {'id': 0, 'name': 'Bobby', 'salary': 100} print(type(my_dict)) # 👉️ <class 'dict'>

我们使用该json.loads()方法将字典的字符串表示形式解析为本机dict对象。

json.loads()请注意,只有在您拥有有效的 JSON 字符串时才能使用该方法。

例如,键和值必须用双引号引起来。如果键或值用单引号括起来,这将不起作用。

json.loads方法JSON 字符串解析为本机 Python 对象。

主程序
import json json_str = '{"name": "Bobby", "age": 30}' my_dict = json.loads(json_str) print(type(my_dict)) # 👉️ <class 'dict'>

如果正在解析的数据不是有效的 JSON 字符串,JSONDecodeError则会引发 a 。

使用 PyYAML 将 Dict 的字符串表示形式转换为 Dict

如果您的字符串不是有效的 JSON,您可以使用该PyYAML模块。

首先,通过运行pip install pyyaml命令安装模块

pip install pyyaml # 👇️ or with pip3 pip3 install pyyaml

现在您可以导入该模块并使用它将字符串解析为本机 Python 字典。

主程序
import yaml my_str = "{'id': 0, 'name': 'Bobby', 'salary': 100}" my_dict = yaml.full_load(my_str) print(my_dict) # 👉️ {'id': 0, 'name': 'Bobby', 'salary': 100} print(type(my_dict)) # 👉️ <class 'dict'>
yaml.full_load()方法获取 YAML 文档,对其进行解析并生成相应的 Python 对象。

full_load()请注意,不建议使用具有不受信任输入的方法。

如果您正在处理不受信任的数据,请改用该yaml.safe_load()方法。

主程序
import yaml my_str = "{'id': 0, 'name': 'Bobby', 'salary': 100}" my_dict = yaml.safe_load(my_str) print(my_dict) # 👉️ {'id': 0, 'name': 'Bobby', 'salary': 100} print(type(my_dict)) # 👉️ <class 'dict'>

yaml.safe_load()方法加载 YAML 语言的一个子集。建议加载不受信任的输入。

在 Python 中将 List 中的字符串拆分为键值对 (dict)

将列表中的字符串拆分为键值对:

  1. 使用生成器表达式将列表中的字符串拆分为嵌套的键值对列表。
  2. 将二维列表传递给dict()类。
主程序
my_list = ['name=Bobby', 'country=Austria', 'job=accountant'] result = dict(kv.split('=') for kv in my_list) # 👇️ {'name': 'Bobby', 'country': 'Austria', 'job': 'accountant'} print(result)

我们使用生成器表达式将列表中的每个字符串拆分为一个 2 元素列表。

主程序
# 👇️ [['name', 'Bobby'], ['country', 'Austria'], ['job', 'accountant']] print(list(kv.split('=') for kv in my_list))

每个嵌套列表中的第一项是名称,第二项是值。

生成器表达式用于对每个元素执行某些操作或选择满足条件的元素子集。

dict ()类可以传递一个可迭代的关键字参数并返回一个新字典。

如果字典中的值是整数,则可以使用
int()类转换它们。

主程序
my_list = ['name=1', 'country=2', 'job=3'] def convert_to_int(kv): return (kv[0], int(kv[1])) result = dict(convert_to_int(kv.split('=')) for kv in my_list) # 👇️ {'name': 1, 'country': 2, 'job': 3} print(result)

convert_to_int使用包含 2 个项目的列表调用该函数 – 一个键和一个值。

它返回一个包含键和值的整数版本的元组。

我还写了一篇关于
如何将字节转换为字典的文章。

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: