将字符串转换为词典列表

2024-05-28 23:45:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串如下

 gmr='rule:unique,attribute:geo,name:unq1,rule:sum,attribute:sales,name:sum_sales'

如果你清楚地看到它的两种字典 规则:唯一,属性:geo,名称:unq1 和 规则:总和,属性:销售,名称:销售总额你知道吗

我想把它们转换成如下

 [
  {'rule': 'sum', 'attribute': 'sales', 'name': 'sum_sales'},
    {'rule': 'unique', 'attribute': 'geo', 'name': 'uniq1'}
 ]

请帮忙

我试过了

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)

但在这里我只得到最后一本字典。你知道吗


Tags: name名称字典属性规则attributeruleat
3条回答

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

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'}]

gmr='规则:唯一,属性:geo,名称:unq1,规则:总和,属性:销售,名称:销售总额' 拆分\u str=gmr.split公司(',') 数据列表=[]

对于范围内的num(0,len(split\u str),3):

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)

从OP示例开始:

>>> gmr='rule:unique,attribute:geo,name:unq1,rule:sum,attribute:sales,name:sum_sales'

先列一张空的单子。你知道吗

>>> dlist = [ ]

在列表上用entry循环,由gmr.split(',')产生

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

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

如果是这样,请在dlist中附加一个新的空字典

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

>>> for entry in gmr.split(','):
    pair = entry.split(':')
    if pair[0] == 'rule':
        dlist.append({ })
    dlist[-1][pair[0]] = pair[1]

打印结果:

>>> print(dlist)
[{'name': 'unq1', 'attribute': 'geo', 'rule': 'unique'},
   {'name': 'sum_sales', 'attribute': 'sales', 'rule': 'sum'}]

看起来像是OP想要得到的。你知道吗

相关问题 更多 >

    热门问题