我有下面的词典列表
input=[{'pid': 66, 'ids': [{'stid': 20, 'st': 20}, {'stid': 21, 'st': 60}, {'stid': 22, 'st': 20}, {'stid': 23, 'st': 60}, {'stid': 24, 'st': 20}], 'count': 5}, {'pid': 27, 'ids': [{'stid': 20, 'st': 20}, {'stid': 22, 'st': 20}, {'stid': 23, 'st': 60}, {'stid': 24, 'st': 20}], 'count': 4}, {'pid': 29, 'ids': [{'stid': 20, 'st': 20}, {'stid': 24, 'st': 20}], 'count': 2}]
我试图获得如下输出 -
res = [66,27,29]
res包含数组中的pid值。
为此,我尝试在下面的代码中仅从输入
获取'pid'项fs_loc = []
for g, items in itertools.groupby(input, lambda x: (x['pid'])):
fs_loc.append({ 'pid': g[0] })
print(fs_loc)
这会抛出错误int不可订阅。 如果我想保留pid,那么相同的代码工作正常,计数 - 以下工作 -
fs_loc = []
for g, items in itertools.groupby(input, lambda x: (x['pid'],x['count'])):
fs_loc.append({ 'pid': g[0], 'count': g[1] })
print(fs_loc)
如何获取pid值的数组列表?
res = [66,27,29]
答案 0 :(得分:2)
简单,只需遍历列表项并从dict到pid
方法获取键dict.get()
的值。
>>> input_ =[{'pid': 66, 'ids': [{'stid': 20, 'st': 20}, {'stid': 21, 'st': 60}, {'stid': 22, 'st': 20}, {'stid': 23, 'st': 60}, {'stid': 24, 'st': 20}], 'count': 5}, {'pid': 27, 'ids': [{'stid': 20, 'st': 20}, {'stid': 22, 'st': 20}, {'stid': 23, 'st': 60}, {'stid': 24, 'st': 20}], 'count': 4}, {'pid': 29, 'ids': [{'stid': 20, 'st': 20}, {'stid': 24, 'st': 20}], 'count': 2}]
>>> [i['pid'] for i in input_]
[66, 27, 29]
或
[i.get('pid') for i in input_]
答案 1 :(得分:1)
简单的方法,
>>> data = [{'count': 5, 'pid': 66, 'ids': [{'stid': 20, 'st': 20}, {'stid': 21, 'st': 60}, {'stid': 22, 'st': 20}, {'stid': 23, 'st': 60}, {'stid': 24, 'st': 20}]}, {'count': 4, 'pid': 27, 'ids': [{'stid': 20, 'st': 20}, {'stid': 22, 'st': 20}, {'stid': 23, 'st': 60}, {'stid': 24, 'st': 20}]}, {'count': 2, 'pid': 29, 'ids': [{'stid': 20, 'st': 20}, {'stid': 24, 'st': 20}]}]
>>> map(lambda x: x['pid'], data)
[66, 27, 29]
答案 2 :(得分:1)
您可以使用setdefault
。请注意,我将原始列表的变量名称更改为input_data
。将input
用于变量名称不是一个好主意。
d = {}
for e in input_data:
for i,j in e.items():
d.setdefault(i, []).append(j)
res = d['pid']
print (res)
输出:
[66, 27, 29]