是否有一种更简单的方法来解析带有列表的数组:
data = [{'id': '1456', 'type': 'hotel', 'money': '123'},
{'id': '3215', 'type': 'appartment', 'rooms': '2', 'toilet': '1'},
{'id': '3213', 'type': 'hotel', 'money': '999'}]
对此:
hotel = ['123, '999']
我想从data
数组中提取type
酒店的货币价值,并将所有内容附加到一个数组中。
我想避免创建一个循环,然后迭代它,然后检查是否有一个叫{money}的key
。如果是这样,请将其解压缩并附加到hotel
数组。
对于Python来说似乎有点多余,我猜......
答案 0 :(得分:3)
是的,您可以使用list comprehension:
hotels = [d['money'] for d in data if d['type'] == 'hotel']
这将有效地查看data
数组并将每个字典提取为d
,如果类型为d['money']
,则仅将'hotel'
添加到结果数组中。
答案 1 :(得分:1)
列表推导允许您基于另一个列表构建列表,您可以使用条件仅选择所需的值。
list = [x['money'] for x in data if x['type'] == 'hotel']
答案 2 :(得分:1)
更具功能性的风格就像toolz库。
http://toolz.readthedocs.org/en/latest/api.html#toolz.itertoolz.pluck
列出理解工作,但与LINQ
相比,我发现它们非常难看答案 3 :(得分:1)
Pandas方法:
In [15]: df = pd.DataFrame(data)
In [16]: df
Out[16]:
id money rooms toilet type
0 1456 123 NaN NaN hotel
1 3215 NaN 2 1 appartment
2 3213 999 NaN NaN hotel
In [17]: df.ix[df.type == 'hotel']
Out[17]:
id money rooms toilet type
0 1456 123 NaN NaN hotel
2 3213 999 NaN NaN hotel
In [18]: df.ix[df.type == 'hotel', 'money']
Out[18]:
0 123
2 999
Name: money, dtype: object
In [19]: df.ix[df.type == 'hotel', 'money'].tolist()
Out[19]: ['123', '999']
一衬垫:
In [20]: pd.DataFrame(data).ix[df.type=='hotel', 'money'].tolist()
Out[20]: ['123', '999']
答案 4 :(得分:1)
功能方法可能类似于:
filter(len, (d.get('money', '') for d in data))
dict.get
部分从每个字典中获取money
值,如果不存在,则返回空字符串。然后,filter
用于删除所有空字符串。