如何遍历字典列表的字符串表示的字典?

时间:2018-01-25 03:16:23

标签: python string list dictionary

在这样的例子中:

"[{'id' : 18, 'name' : 'Rick'}, {'id' : 19, 'name' : 'Luke'}]"

我正在处理str list dict的{​​{1}}代表。如何遍历列表以返回所有" id"的新列表?在词典中?

期望的结果:

[18, 19]

编辑: 我已经尝试将字符串转换为带有ast.literal_eval(foolist)的列表并迭代列表中的项目。但是,当我执行此操作时,它会从foolist开始,然后"{"重复"'"中的字符。

6 个答案:

答案 0 :(得分:2)

正如几条评论所述:

import ast


foolist = "[{'id' : 18, 'name' : 'Rick'}, {'id' : 19, 'name' : 'Luke'}]"
[d["id"] for d in ast.literal_eval(foolist)]
# [18, 19]

答案 1 :(得分:0)

我想这段代码符合你的目的

a = "[{'id' : 18, 'name' : 'Rick'}, {'id' : 19, 'name' : 'Luke'}]"

a = a.split(',')
output = []
for data in a:
    data = data.replace('[', '').replace('{','').replace(']','').replace('}','').replace(' ','')
    if eval(data.split(':')[0]) == 'id':
        output.append(data.split(':')[1])
print(output)

答案 2 :(得分:0)

我已在Combining 2 dictionaries with common key修改了之前的答案。

def mergeDoLs(*dicts):
    def flatten(LoL):
        return [e for l in LoL for e in l]
    rtr= {k: [] for k in set(flatten(d for d in dicts))}
    for k, v in flatten(d.items() for d in dicts):
        rtr[k].append(v)
    return rtr

d_str = "[{'id' : 18, 'name' : 'Rick'}, {'id' : 19, 'name' : 'Luke'}]"
d = mergeDoLs(*eval(d_str))
d['id']

# output
# d = {'id': [18, 19], 'name': ['Rick', 'Luke']}
# d['id'] = [18, 19]

答案 3 :(得分:0)

使用JSON内置库。

import json

raw_string = "[{'id' : 18, 'name' : 'Rick'}, {'id' : 19, 'name' : 'Luke'}]"
json_string = raw_string.replace('\'', '"') #converting NON-JSON string to JSON string


my_dictionary = dict()
my_dictionary = json.loads(json_string)

ids = []

for item in my_dictionary:
    ids.append(int(item['id']))

print(ids)

答案 4 :(得分:0)

我试过了: -

import json

a = "[{'id' : 18, 'name' : 'Rick'}, {'id' : 19, 'name' : 'Luke'}]"
final_list = []
a = a.replace("'",'"')
b = '{"chck":'+a+"}"
b = json.loads(b)
for i in b.values():
    for j in i:
        final_list.append(j['id'])
print (final_list)

答案 5 :(得分:0)

试试这个方法:

import ast

data="[{'id' : 18, 'name' : 'Rick'}, {'id' : 19, 'name' : 'Luke'}]"


print(list(map(lambda x:x['id'],ast.literal_eval(data))))

输出:

[18, 19]