在这样的例子中:
"[{'id' : 18, 'name' : 'Rick'}, {'id' : 19, 'name' : 'Luke'}]"
我正在处理str
list
dict
的{{1}}代表。如何遍历列表以返回所有" id"的新列表?在词典中?
期望的结果:
[18, 19]
编辑:
我已经尝试将字符串转换为带有ast.literal_eval(foolist)
的列表并迭代列表中的项目。但是,当我执行此操作时,它会从foolist
开始,然后"{"
重复"'"
中的字符。
答案 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]