Python字典列表转等号分隔字符串报错,求正确实现方法
解决列表转指定格式字符串的问题
首先咱们先理清你遇到的两个核心问题:
第一个代码报错的原因
你把列表转成字符串后用ast.literal_eval(s),得到的其实是一个元组(因为字符串是{"name": "Cool", "id": 0}, {"name": "Good", "id": 1}, {"name": "Bad", "id": 3},eval后会被解析成包含三个字典的元组),而元组根本没有items()方法,所以才会抛出AttributeError: 'tuple' object has no attribute 'items'。而且完全没必要把列表转成字符串再转回来——直接遍历原列表就好,这步属于做了无用功。
第二个代码结果不符合预期的原因
你只取了列表里第一个字典的键值对,而且是按key=value的格式拼接,既没处理所有字典,也没按照你想要的id=name顺序来。
正确的解法
你需要遍历列表里的每个字典,取出每个字典的id和name值,按{id}={name}的格式拼接,最后把所有这些字符串用, 连接起来。用Python的f-string可以很直观地实现:
list_of_dictionary = [{"name": "Cool", "id": 0}, {"name": "Good", "id": 1}, {"name": "Bad", "id": 3}] # 核心代码:遍历每个字典,格式化id=name,再拼接 result = ", ".join([f"{d['id']}={d['name']}" for d in list_of_dictionary]) print(result) # 输出:0=Cool, 1=Good, 3=Bad
代码解释:
- 用列表推导式遍历
list_of_dictionary中的每个字典d - 对每个字典,取出
d['id'](数字类型会自动转成字符串)和d['name'],用f-string格式化为"id=name"的字符串 - 最后用
,作为分隔符,把所有格式化后的字符串连接成一个整体
如果你需要兼容Python 3.5之前的版本(不支持f-string),可以用str.format()替代:
result = ", ".join(["{}={}".format(d['id'], d['name']) for d in list_of_dictionary])
这样就能完美得到你想要的结果啦!
内容的提问来源于stack exchange,提问作者Sirsa
相关产品推荐
相关产品推荐

