假设我有以下词典列表:
heroes = [
{'id':'001', 'actor_name':'Chris Evans', 'hero_name':'Captain America'},
{'id':'002', 'actor_name':'Chris Hemsworth', 'hero_name':'Thor'},
{'id':'003', 'actor_name':'Robert Downey', 'hero_name':'Iron Man'},
{'id':'004', 'actor_name':'Don Cheadle', 'hero_name':'War Machine'},
{'id':'005', 'actor_name':'Jeremy Renner', 'hero_name':'Hawkeye'},
]
我需要获取表格的值;
”获取英雄ID,其中演员名称为“ Don Cheadle”,英雄名称为“战争” 机器”
或
“获取id为1的英雄名称”
如何在python中实现呢?
由于列表中有多个词典,因此可能会有一些具有相同ID的词典。因此,在这种情况下,我需要所有这些值。
这个问题使我非常困惑。我该如何实现?
答案 0 :(得分:2)
您可以在python中使用简单的for循环
NOLOCK
输出
heroes = [
{'id': '001', 'actor_name': 'Chris Evans', 'hero_name': 'Captain America'},
{'id': '002', 'actor_name': 'Chris Hemsworth', 'hero_name': 'Thor'},
{'id': '003', 'actor_name': 'Robert Downey', 'hero_name': 'Iron Man'},
{'id': '004', 'actor_name': 'Don Cheadle', 'hero_name': 'War Machine'},
{'id': '005', 'actor_name': 'Jeremy Renner', 'hero_name': 'Hawkeye'},
]
for hero in heroes:
if int(hero['id']) == 1:
print(hero['hero_name'])
elif hero['hero_name'] == 'War Machine' and hero['actor_name'] == 'Don Cheadle':
print(hero['id'])
答案 1 :(得分:1)
您可以使用数据创建一个pandas.DataFrame
import pandas as pd
heroes = [
{'id':'001', 'actor_name':'Chris Evans', 'hero_name':'Captain America'},
{'id':'002', 'actor_name':'Chris Hemsworth', 'hero_name':'Thor'},
{'id':'003', 'actor_name':'Robert Downey', 'hero_name':'Iron Man'},
{'id':'004', 'actor_name':'Don Cheadle', 'hero_name':'War Machine'},
{'id':'005', 'actor_name':'Jeremy Renner', 'hero_name':'Hawkeye'},
]
data = pd.DataFrame(heroes)
然后例如进行查询
>>> data['actor_name'] == 'Don Cheadle'
0 False
1 False
2 False
3 True
4 False
Name: actor_name, dtype: bool
然后使用查询结果
>>> data.loc[data['actor_name'] == 'Don Cheadle']['id']
3 004
Name: id, dtype: object
您也可以创建布尔类型的查询
>>> (data['actor_name'] == 'Don Cheadle') & (data['hero_name'] == 'War Machine')
0 False
1 False
2 False
3 True
4 False
dtype: bool
还有pandas.read_sql_query
可以perform SQL queries against your dataframe。
答案 2 :(得分:1)
我将创建一个函数,该函数使用要返回的列和条件字典,并相应地过滤记录:
def find_data(returnCol, conds):
retVal = []
for hero in heroes:
toAdd = True
for k, v in conds.items():
if not hero[k] == v:
toAdd = False
break
if toAdd:
retVal.append(hero[returnCol])
return retVal
print(find_data('id', {'actor_name' : 'Don Cheadle', 'hero_name' : 'War Machine'}))