将字符串转换为词典列表

时间:2019-01-03 08:43:31

标签: python python-3.x string list dictionary

我有一个字符串如下

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

如果您清楚地看到2种字典的种类  规则:唯一,属性: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)

但是这里我只得到最后的字典。

3 个答案:

答案 0 :(得分:1)

gmr ='rule:unique,attribute:geo,name:unq1,rule:sum,attribute:sales,name:sum_sales' split_str = gmr.split(',') dlist = []

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

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 :(得分:1)

从OP示例开始:

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

看起来像OP打算得到的。

答案 2 :(得分:0)

http://demo.wp-api.org/wp-json/wp/v2/posts?include=1,35 总是给出一个字典,而不是dict个字典。对于后者,您可以先用list分割后再使用列表推导:

'rule:'