首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串转换为字典列表

将字符串转换为字典列表
EN

Stack Overflow用户
提问于 2019-01-03 16:43:31
回答 3查看 227关注 0票数 3

我有如下所示的字符串

代码语言:javascript
复制
 gmr='rule:unique,attribute:geo,name:unq1,rule:sum,attribute:sales,name:sum_sales'

如果您清楚地看到它的2种字典规则:唯一,属性:地理,名称:UNQ1和规则:总和,属性:销售,name:sum_sales

我想将它们转换为如下所示

代码语言:javascript
复制
 [
  {'rule': 'sum', 'attribute': 'sales', 'name': 'sum_sales'},
    {'rule': 'unique', 'attribute': 'geo', 'name': 'uniq1'}
 ]

热心的帮助

我试过了

代码语言:javascript
复制
gmr='rule:unique,attribute:geo,name:unq1,rule:sum,attribute:sales,name:sum_sales'
 dlist=[]
 at_rule_gm=(x.split(':') for x in gmr.split(','))
 dict(at_rule_gm)

但在这里我只得到了最后一本字典。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-03 17:12:30

从OP的示例开始:

代码语言:javascript
复制
>>> gmr='rule:unique,attribute:geo,name:unq1,rule:sum,attribute:sales,name:sum_sales'

首先做一个空的列表。

代码语言:javascript
复制
>>> dlist = [ ]

使用列表上的entry循环,由gmr.split(',')生成,

entry.split(':')存储到pair中,

检查pair (键)中的第一个值是否为'rule'

如果是,则向dlist追加一个新的空字典

将配对存储到dlist的最后一个条目中

代码语言:javascript
复制
>>> for entry in gmr.split(','):
    pair = entry.split(':')
    if pair[0] == 'rule':
        dlist.append({ })
    dlist[-1][pair[0]] = pair[1]

打印结果:

代码语言:javascript
复制
>>> print(dlist)
[{'name': 'unq1', 'attribute': 'geo', 'rule': 'unique'},
   {'name': 'sum_sales', 'attribute': 'sales', 'rule': 'sum'}]

看起来就是OP想要得到的。

票数 1
EN

Stack Overflow用户

发布于 2019-01-03 17:11:03

gmr=‘规则:唯一,属性:地域,名称:UNQ1,规则:总和,属性:销售,name:sum_sales’split_str = gmr.split(',') dlist = []

对于范围内的num (0,len(split_str),3):

代码语言:javascript
复制
temp_dict = {}
temp1 = split_str[num]
temp2 = split_str[num+1]
temp3 = split_str[num+2]
key,value = temp1.split(':')
temp_dict.update({key:value})
key,value = temp2.split(':')
temp_dict.update({key:value})
key,value = temp3.split(':')
temp_dict.update({key:value})
dlist.append(temp_dict)
票数 1
EN

Stack Overflow用户

发布于 2019-01-03 17:12:22

dict总是给出一个字典,而不是一个字典的list。对于后者,您可以在第一次按'rule:'拆分之后使用列表理解

代码语言:javascript
复制
gmr = 'rule:unique,attribute:geo,name:unq1,rule:sum,attribute:sales,name:sum_sales'

items = (f'rule:{x}' for x in filter(None, gmr.split('rule:')))
res = [dict(x.split(':') for x in item.split(',') if x) for item in items]

print(res)

# [{'attribute': 'geo', 'name': 'unq1', 'rule': 'unique'},
#  {'attribute': 'sales', 'name': 'sum_sales', 'rule': 'sum'}]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54018874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档